mirror of
https://github.com/MickMake/GoSungrow.git
synced 2025-03-25 17:11:43 +01:00
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package tablib
|
|
|
|
import "gopkg.in/yaml.v2"
|
|
|
|
// LoadYAML loads a dataset from a YAML source.
|
|
func LoadYAML(yamlContent []byte) (*Dataset, error) {
|
|
var input []map[string]interface{}
|
|
if err := yaml.Unmarshal(yamlContent, &input); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return internalLoadFromDict(input)
|
|
}
|
|
|
|
// LoadDatabookYAML loads a Databook from a YAML source.
|
|
func LoadDatabookYAML(yamlContent []byte) (*Databook, error) {
|
|
var input []map[string]interface{}
|
|
var internalInput []map[string]interface{}
|
|
if err := yaml.Unmarshal(yamlContent, &input); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
db := NewDatabook()
|
|
for _, d := range input {
|
|
b, err := yaml.Marshal(d["data"])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := yaml.Unmarshal(b, &internalInput); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if ds, err := internalLoadFromDict(internalInput); err == nil {
|
|
db.AddSheet(d["title"].(string), ds)
|
|
} else {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return db, nil
|
|
}
|
|
|
|
// YAML returns a YAML representation of the Dataset as an Exportable.
|
|
func (d *Dataset) YAML() (*Exportable, error) {
|
|
back := d.Dict()
|
|
|
|
b, err := yaml.Marshal(back)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return newExportableFromBytes(b), nil
|
|
}
|
|
|
|
// YAML returns a YAML representation of the Databook as an Exportable.
|
|
func (d *Databook) YAML() (*Exportable, error) {
|
|
y := make([]map[string]interface{}, len(d.sheets))
|
|
i := 0
|
|
for _, s := range d.sheets {
|
|
y[i] = make(map[string]interface{})
|
|
y[i]["title"] = s.title
|
|
y[i]["data"] = s.dataset.Dict()
|
|
i++
|
|
}
|
|
b, err := yaml.Marshal(y)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return newExportableFromBytes(b), nil
|
|
}
|