X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=mylistanime.go;h=8a6fdf48b5f4d605eee972bbc1829f9e7bbb5468;hb=57d0119266f3ca005a0cfc12ca96ca2a8c10c93b;hp=3dc407b2e33d1501c39279a2ed58ab5dff200c77;hpb=fd8fde19d990e4d6dbf65eafd4059f4682f311f1;p=go-anidb.git diff --git a/mylistanime.go b/mylistanime.go index 3dc407b..8a6fdf4 100644 --- a/mylistanime.go +++ b/mylistanime.go @@ -10,10 +10,7 @@ import ( type MyListAnime struct { AID AID - UnknownState misc.EpisodeList - OnHDD misc.EpisodeList - OnCD misc.EpisodeList - Deleted misc.EpisodeList + EpisodesWithState MyListStateMap WatchedEpisodes misc.EpisodeList @@ -48,3 +45,30 @@ func (ge GroupEpisodes) UnmarshalJSON(b []byte) error { return nil } + +type MyListStateMap map[MyListState]misc.EpisodeList + +func (sm MyListStateMap) MarshalJSON() ([]byte, error) { + generic := make(map[string]misc.EpisodeList, len(sm)) + for k, v := range sm { + generic[strconv.Itoa(int(k))] = v + } + return json.Marshal(generic) +} + +func (sm MyListStateMap) UnmarshalJSON(b []byte) error { + var generic map[string]misc.EpisodeList + if err := json.Unmarshal(b, &generic); err != nil { + return err + } + for k, v := range generic { + ik, err := strconv.ParseInt(k, 10, 32) + if err != nil { + return err + } + + sm[MyListState(ik)] = v + } + + return nil +}