attributes.go 703 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package main
  2. import "fmt"
  3. type Attributes struct {
  4. node *Node // Ref
  5. Category string
  6. Others map[string]float64
  7. }
  8. func (a *Attributes) Parse(node *Node) error {
  9. if node.Key() != "attributes" {
  10. return fmt.Errorf("not attributes")
  11. }
  12. a.node = node
  13. for _, kid := range node.Children {
  14. if kid.Key() == "category" {
  15. a.Category = kid.Value()
  16. } else {
  17. a.Others[kid.Key()] = kid.ValueFloat64()
  18. }
  19. }
  20. return nil
  21. }
  22. func (a *Attributes) Update() error {
  23. if a.node == nil {
  24. return fmt.Errorf("no node, attributes")
  25. }
  26. a.node.RmAllChildren()
  27. n := a.node.NewChild()
  28. n.Set("category", a.Category)
  29. for k, v := range a.Others {
  30. n := a.node.NewChild()
  31. n.Set(k, v)
  32. }
  33. return nil
  34. }