|
@@ -0,0 +1,65 @@
|
|
|
|
+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")
|
|
|
|
+}
|