2017-08-28 20:56:18 -05:00
|
|
|
// Copyright 2017 Baliance. All rights reserved.
|
|
|
|
//
|
2017-09-09 10:21:47 -05:00
|
|
|
// DO NOT EDIT: generated by gooxml ECMA-376 generator
|
|
|
|
//
|
2017-08-28 20:56:18 -05:00
|
|
|
// Use of this source code is governed by the terms of the Affero GNU General
|
|
|
|
// Public License version 3.0 as published by the Free Software Foundation and
|
|
|
|
// appearing in the file LICENSE included in the packaging of this file. A
|
|
|
|
// commercial license can be purchased by contacting sales@baliance.com.
|
|
|
|
|
2017-09-23 08:23:34 -05:00
|
|
|
package sml
|
2017-08-28 20:56:18 -05:00
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/xml"
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"strconv"
|
|
|
|
)
|
|
|
|
|
|
|
|
type CT_Connection struct {
|
|
|
|
// Connection Id
|
|
|
|
IdAttr uint32
|
|
|
|
// Source Database File
|
|
|
|
SourceFileAttr *string
|
|
|
|
// Connection File
|
|
|
|
OdcFileAttr *string
|
|
|
|
// Keep Connection Open
|
|
|
|
KeepAliveAttr *bool
|
|
|
|
// Automatic Refresh Interval
|
|
|
|
IntervalAttr *uint32
|
|
|
|
// Connection Name
|
|
|
|
NameAttr *string
|
|
|
|
// Connection Description
|
|
|
|
DescriptionAttr *string
|
|
|
|
// Database Source Type
|
|
|
|
TypeAttr *uint32
|
|
|
|
// Reconnection Method
|
|
|
|
ReconnectionMethodAttr *uint32
|
|
|
|
// Last Refresh Version
|
|
|
|
RefreshedVersionAttr uint8
|
|
|
|
// Minimum Version Required for Refresh
|
|
|
|
MinRefreshableVersionAttr *uint8
|
|
|
|
// Save Password
|
|
|
|
SavePasswordAttr *bool
|
|
|
|
// New Connection
|
|
|
|
NewAttr *bool
|
|
|
|
// Deleted Connection
|
|
|
|
DeletedAttr *bool
|
|
|
|
// Only Use Connection File
|
|
|
|
OnlyUseConnectionFileAttr *bool
|
|
|
|
// Background Refresh
|
|
|
|
BackgroundAttr *bool
|
|
|
|
// Refresh on Open
|
|
|
|
RefreshOnLoadAttr *bool
|
|
|
|
// Save Data
|
|
|
|
SaveDataAttr *bool
|
|
|
|
// Reconnection Method
|
|
|
|
CredentialsAttr ST_CredMethod
|
|
|
|
// SSO Id
|
|
|
|
SingleSignOnIdAttr *string
|
|
|
|
// Database Properties
|
|
|
|
DbPr *CT_DbPr
|
|
|
|
// OLAP Properties
|
|
|
|
OlapPr *CT_OlapPr
|
|
|
|
// Web Query Properties
|
|
|
|
WebPr *CT_WebPr
|
|
|
|
// Text Import Settings
|
|
|
|
TextPr *CT_TextPr
|
|
|
|
// Query Parameters
|
|
|
|
Parameters *CT_Parameters
|
|
|
|
// Future Feature Data Storage
|
|
|
|
ExtLst *CT_ExtensionList
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewCT_Connection() *CT_Connection {
|
|
|
|
ret := &CT_Connection{}
|
|
|
|
return ret
|
|
|
|
}
|
2017-09-01 15:19:23 -05:00
|
|
|
|
2017-08-28 20:56:18 -05:00
|
|
|
func (m *CT_Connection) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "id"},
|
|
|
|
Value: fmt.Sprintf("%v", m.IdAttr)})
|
|
|
|
if m.SourceFileAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "sourceFile"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.SourceFileAttr)})
|
|
|
|
}
|
|
|
|
if m.OdcFileAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "odcFile"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.OdcFileAttr)})
|
|
|
|
}
|
|
|
|
if m.KeepAliveAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "keepAlive"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.KeepAliveAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.IntervalAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "interval"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.IntervalAttr)})
|
|
|
|
}
|
|
|
|
if m.NameAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "name"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.NameAttr)})
|
|
|
|
}
|
|
|
|
if m.DescriptionAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "description"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.DescriptionAttr)})
|
|
|
|
}
|
|
|
|
if m.TypeAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "type"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.TypeAttr)})
|
|
|
|
}
|
|
|
|
if m.ReconnectionMethodAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "reconnectionMethod"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.ReconnectionMethodAttr)})
|
|
|
|
}
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "refreshedVersion"},
|
|
|
|
Value: fmt.Sprintf("%v", m.RefreshedVersionAttr)})
|
|
|
|
if m.MinRefreshableVersionAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "minRefreshableVersion"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.MinRefreshableVersionAttr)})
|
|
|
|
}
|
|
|
|
if m.SavePasswordAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "savePassword"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.SavePasswordAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.NewAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "new"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.NewAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.DeletedAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "deleted"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.DeletedAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.OnlyUseConnectionFileAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "onlyUseConnectionFile"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.OnlyUseConnectionFileAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.BackgroundAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "background"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.BackgroundAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.RefreshOnLoadAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "refreshOnLoad"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.RefreshOnLoadAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.SaveDataAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "saveData"},
|
2017-09-03 21:00:35 -05:00
|
|
|
Value: fmt.Sprintf("%d", b2i(*m.SaveDataAttr))})
|
2017-08-28 20:56:18 -05:00
|
|
|
}
|
|
|
|
if m.CredentialsAttr != ST_CredMethodUnset {
|
|
|
|
attr, err := m.CredentialsAttr.MarshalXMLAttr(xml.Name{Local: "credentials"})
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
start.Attr = append(start.Attr, attr)
|
|
|
|
}
|
|
|
|
if m.SingleSignOnIdAttr != nil {
|
|
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "singleSignOnId"},
|
|
|
|
Value: fmt.Sprintf("%v", *m.SingleSignOnIdAttr)})
|
|
|
|
}
|
|
|
|
e.EncodeToken(start)
|
|
|
|
if m.DbPr != nil {
|
2017-09-10 10:02:39 -05:00
|
|
|
sedbPr := xml.StartElement{Name: xml.Name{Local: "ma:dbPr"}}
|
2017-08-28 20:56:18 -05:00
|
|
|
e.EncodeElement(m.DbPr, sedbPr)
|
|
|
|
}
|
|
|
|
if m.OlapPr != nil {
|
2017-09-10 10:02:39 -05:00
|
|
|
seolapPr := xml.StartElement{Name: xml.Name{Local: "ma:olapPr"}}
|
2017-08-28 20:56:18 -05:00
|
|
|
e.EncodeElement(m.OlapPr, seolapPr)
|
|
|
|
}
|
|
|
|
if m.WebPr != nil {
|
2017-09-10 10:02:39 -05:00
|
|
|
sewebPr := xml.StartElement{Name: xml.Name{Local: "ma:webPr"}}
|
2017-08-28 20:56:18 -05:00
|
|
|
e.EncodeElement(m.WebPr, sewebPr)
|
|
|
|
}
|
|
|
|
if m.TextPr != nil {
|
2017-09-10 10:02:39 -05:00
|
|
|
setextPr := xml.StartElement{Name: xml.Name{Local: "ma:textPr"}}
|
2017-08-28 20:56:18 -05:00
|
|
|
e.EncodeElement(m.TextPr, setextPr)
|
|
|
|
}
|
|
|
|
if m.Parameters != nil {
|
2017-09-10 10:02:39 -05:00
|
|
|
separameters := xml.StartElement{Name: xml.Name{Local: "ma:parameters"}}
|
2017-08-28 20:56:18 -05:00
|
|
|
e.EncodeElement(m.Parameters, separameters)
|
|
|
|
}
|
|
|
|
if m.ExtLst != nil {
|
2017-09-10 10:02:39 -05:00
|
|
|
seextLst := xml.StartElement{Name: xml.Name{Local: "ma:extLst"}}
|
2017-08-28 20:56:18 -05:00
|
|
|
e.EncodeElement(m.ExtLst, seextLst)
|
|
|
|
}
|
|
|
|
e.EncodeToken(xml.EndElement{Name: start.Name})
|
|
|
|
return nil
|
|
|
|
}
|
2017-09-01 15:19:23 -05:00
|
|
|
|
2017-08-28 20:56:18 -05:00
|
|
|
func (m *CT_Connection) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
|
|
|
// initialize to default
|
|
|
|
for _, attr := range start.Attr {
|
|
|
|
if attr.Name.Local == "id" {
|
|
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 32)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.IdAttr = uint32(parsed)
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "sourceFile" {
|
|
|
|
parsed, err := attr.Value, error(nil)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.SourceFileAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "odcFile" {
|
|
|
|
parsed, err := attr.Value, error(nil)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.OdcFileAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "keepAlive" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.KeepAliveAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "interval" {
|
|
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 32)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
pt := uint32(parsed)
|
|
|
|
m.IntervalAttr = &pt
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "name" {
|
|
|
|
parsed, err := attr.Value, error(nil)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.NameAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "description" {
|
|
|
|
parsed, err := attr.Value, error(nil)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.DescriptionAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "type" {
|
|
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 32)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
pt := uint32(parsed)
|
|
|
|
m.TypeAttr = &pt
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "reconnectionMethod" {
|
|
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 32)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
pt := uint32(parsed)
|
|
|
|
m.ReconnectionMethodAttr = &pt
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "refreshedVersion" {
|
|
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 8)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.RefreshedVersionAttr = uint8(parsed)
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "minRefreshableVersion" {
|
|
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 8)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
pt := uint8(parsed)
|
|
|
|
m.MinRefreshableVersionAttr = &pt
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "savePassword" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.SavePasswordAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "new" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.NewAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "deleted" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.DeletedAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "onlyUseConnectionFile" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.OnlyUseConnectionFileAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "background" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.BackgroundAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "refreshOnLoad" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.RefreshOnLoadAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "saveData" {
|
|
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.SaveDataAttr = &parsed
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "credentials" {
|
|
|
|
m.CredentialsAttr.UnmarshalXMLAttr(attr)
|
|
|
|
}
|
|
|
|
if attr.Name.Local == "singleSignOnId" {
|
|
|
|
parsed, err := attr.Value, error(nil)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
m.SingleSignOnIdAttr = &parsed
|
|
|
|
}
|
|
|
|
}
|
|
|
|
lCT_Connection:
|
|
|
|
for {
|
|
|
|
tok, err := d.Token()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
switch el := tok.(type) {
|
|
|
|
case xml.StartElement:
|
2017-09-10 10:02:39 -05:00
|
|
|
switch el.Name {
|
|
|
|
case xml.Name{Space: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", Local: "dbPr"}:
|
2017-08-28 20:56:18 -05:00
|
|
|
m.DbPr = NewCT_DbPr()
|
|
|
|
if err := d.DecodeElement(m.DbPr, &el); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2017-09-10 10:02:39 -05:00
|
|
|
case xml.Name{Space: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", Local: "olapPr"}:
|
2017-08-28 20:56:18 -05:00
|
|
|
m.OlapPr = NewCT_OlapPr()
|
|
|
|
if err := d.DecodeElement(m.OlapPr, &el); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2017-09-10 10:02:39 -05:00
|
|
|
case xml.Name{Space: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", Local: "webPr"}:
|
2017-08-28 20:56:18 -05:00
|
|
|
m.WebPr = NewCT_WebPr()
|
|
|
|
if err := d.DecodeElement(m.WebPr, &el); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2017-09-10 10:02:39 -05:00
|
|
|
case xml.Name{Space: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", Local: "textPr"}:
|
2017-08-28 20:56:18 -05:00
|
|
|
m.TextPr = NewCT_TextPr()
|
|
|
|
if err := d.DecodeElement(m.TextPr, &el); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2017-09-10 10:02:39 -05:00
|
|
|
case xml.Name{Space: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", Local: "parameters"}:
|
2017-08-28 20:56:18 -05:00
|
|
|
m.Parameters = NewCT_Parameters()
|
|
|
|
if err := d.DecodeElement(m.Parameters, &el); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2017-09-10 10:02:39 -05:00
|
|
|
case xml.Name{Space: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", Local: "extLst"}:
|
2017-08-28 20:56:18 -05:00
|
|
|
m.ExtLst = NewCT_ExtensionList()
|
|
|
|
if err := d.DecodeElement(m.ExtLst, &el); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
default:
|
2017-09-01 16:52:12 -05:00
|
|
|
log.Printf("skipping unsupported element on CT_Connection %v", el.Name)
|
2017-08-28 20:56:18 -05:00
|
|
|
if err := d.Skip(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case xml.EndElement:
|
|
|
|
break lCT_Connection
|
|
|
|
case xml.CharData:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
2017-09-01 15:19:23 -05:00
|
|
|
|
|
|
|
// Validate validates the CT_Connection and its children
|
2017-08-28 20:56:18 -05:00
|
|
|
func (m *CT_Connection) Validate() error {
|
|
|
|
return m.ValidateWithPath("CT_Connection")
|
|
|
|
}
|
2017-09-01 15:19:23 -05:00
|
|
|
|
|
|
|
// ValidateWithPath validates the CT_Connection and its children, prefixing error messages with path
|
2017-08-28 20:56:18 -05:00
|
|
|
func (m *CT_Connection) ValidateWithPath(path string) error {
|
|
|
|
if err := m.CredentialsAttr.ValidateWithPath(path + "/CredentialsAttr"); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if m.DbPr != nil {
|
|
|
|
if err := m.DbPr.ValidateWithPath(path + "/DbPr"); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if m.OlapPr != nil {
|
|
|
|
if err := m.OlapPr.ValidateWithPath(path + "/OlapPr"); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if m.WebPr != nil {
|
|
|
|
if err := m.WebPr.ValidateWithPath(path + "/WebPr"); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if m.TextPr != nil {
|
|
|
|
if err := m.TextPr.ValidateWithPath(path + "/TextPr"); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if m.Parameters != nil {
|
|
|
|
if err := m.Parameters.ValidateWithPath(path + "/Parameters"); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if m.ExtLst != nil {
|
|
|
|
if err := m.ExtLst.ValidateWithPath(path + "/ExtLst"); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|