1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package odml
- import (
- "fmt"
- "encoding/json"
- )
- type Section struct {
- Name string `json:"-" xml:"name"`
- Type string `json:"-" xml:"type"`
- Properties [] Property `json:"-" xml:"property"`
- Text string `json:"text"`
- Sections [] Section `json:"-" xml:"section"`
- Children [] OdMLObject `json:"children,omitempty"`
- }
- type Property struct {
- Name string `json:"-" xml:"name"`
- Value []string `json:"-" xml:"value"`
- Text string `json:"text"`
- Icon string
- Definition string `xml:"definition"`
- }
- type OdMLObject struct {
- Prop Property
- Section Section
- Type string
- }
- type Odml struct {
- OdmnlSections []Section `json:"children" xml:"section"`
- }
- func (u *Property) MarshalJSON() ([]byte, error) {
- type Alias Property
- if u.Text == "" {
- u.Text = fmt.Sprintf("%s: %s (%s)", u.Name, u.Value, u.Definition)
- }
- return json.Marshal(Alias(*u))
- }
- func (u *Section) MarshalJSON() ([]byte, error) {
- type Alias Section
- if u.Text == "" {
- u.Text = fmt.Sprintf("%s", u.Name)
- }
- for _, x := range u.Properties {
- u.Children = append(u.Children, OdMLObject{Prop: x, Type: "property"})
- }
- for _, x := range u.Sections {
- u.Children = append(u.Children, OdMLObject{Section: x, Type: "section"})
- }
- return json.Marshal(Alias(*u))
- }
- func (u *OdMLObject) MarshalJSON() ([]byte, error) {
- if u.Type == "property" {
- return u.Prop.MarshalJSON()
- }
- if u.Type == "section" {
- return u.Section.MarshalJSON()
- }
- return nil, fmt.Errorf("Could not unmarshal odml object")
- }
|