]> git.lizzy.rs Git - go-anidb.git/blobdiff - file.go
anidb: Parse the LID from FILE response
[go-anidb.git] / file.go
diff --git a/file.go b/file.go
index 0a1c6d3d057a8023eca890fe942dfd545746b3cc..08da122f7e33612fdb8ca45bd2aeb26a9ac4a833 100644 (file)
--- a/file.go
+++ b/file.go
@@ -39,6 +39,7 @@ type File struct {
        AID AID
        EID EID
        GID GID
+       LID LIDMap
 
        EpisodeNumber misc.EpisodeList
 
@@ -99,3 +100,30 @@ func (er RelatedEpisodes) UnmarshalJSON(b []byte) error {
 
        return nil
 }
+
+type LIDMap map[UID]LID
+
+func (m LIDMap) MarshalJSON() ([]byte, error) {
+       generic := make(map[string]int, len(m))
+       for k, v := range m {
+               generic[strconv.Itoa(int(k))] = int(v)
+       }
+       return json.Marshal(generic)
+}
+
+func (m LIDMap) UnmarshalJSON(b []byte) error {
+       var generic map[string]int
+       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
+               }
+
+               m[UID(ik)] = LID(v)
+       }
+
+       return nil
+}