]> git.lizzy.rs Git - go-anidb.git/blobdiff - mylistanime.go
anidb: Use a map instead of various fields that have to be switched
[go-anidb.git] / mylistanime.go
index 3dc407b2e33d1501c39279a2ed58ab5dff200c77..8a6fdf48b5f4d605eee972bbc1829f9e7bbb5468 100644 (file)
@@ -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
+}