diff --git a/echarts.go b/echarts.go index 19659a8..ecad892 100644 --- a/echarts.go +++ b/echarts.go @@ -209,11 +209,33 @@ type EChartsLegend struct { TextStyle EChartsTextStyle `json:"textStyle"` } +type EChartsMarkData struct { + Type string `json:"type"` +} +type _EChartsMarkData EChartsMarkData + +func (emd *EChartsMarkData) UnmarshalJSON(data []byte) error { + data = bytes.TrimSpace(data) + if len(data) == 0 { + return nil + } + data = convertToArray(data) + ds := make([]*_EChartsMarkData, 0) + err := json.Unmarshal(data, &ds) + if err != nil { + return err + } + for _, d := range ds { + if d.Type != "" { + emd.Type = d.Type + } + } + return nil +} + type EChartsMarkPoint struct { - SymbolSize int `json:"symbolSize"` - Data []struct { - Type string `json:"type"` - } `json:"data"` + SymbolSize int `json:"symbolSize"` + Data []EChartsMarkData `json:"data"` } func (emp *EChartsMarkPoint) ToSeriesMarkPoint() SeriesMarkPoint { diff --git a/echarts_test.go b/echarts_test.go index e484b85..f3b70f1 100644 --- a/echarts_test.go +++ b/echarts_test.go @@ -330,6 +330,20 @@ func TestEChartsSeries(t *testing.T) { }, esList) } +func TestEChartsMarkData(t *testing.T) { + assert := assert.New(t) + + emd := EChartsMarkData{} + err := emd.UnmarshalJSON([]byte(`{"type": "average"}`)) + assert.Nil(err) + assert.Equal("average", emd.Type) + + emd = EChartsMarkData{} + err = emd.UnmarshalJSON([]byte(`[{}, {"type": "average"}]`)) + assert.Nil(err) + assert.Equal("average", emd.Type) +} + func TestEChartsMarkPoint(t *testing.T) { assert := assert.New(t)