package anilist import ( "time" ) type User struct { ID int `json:"id,omitempty"` Name string `json:"name,omitempty"` } type Media struct { ID int `json:"id"` Title MediaTitle `json:"title"` Type MediaType `json:"type"` Format MediaFormat `json:"format"` Status MediaStatus `json:"status"` Description string `json:"description"` StartDate FuzzyDate `json:"startDate"` EndDate FuzzyDate `json:"endDate"` Season MediaSeason `json:"season"` SeasonYear int `json:"seasonYear"` SeasonInt int `json:"seasonInt"` Episodes int `json:"episodes"` Duration Minutes `json:"duration"` Chapters int `json:"chapters"` Volumes int `json:"volumes"` CountryOfOrigin string `json:"countryOfOrigin"` Licensed bool `json:"isLicensed"` Source MediaSource `json:"source"` Hashtag string `json:"hashtag"` Trailer MediaTrailer `json:"trailer"` UpdatedAt UnixTime `json:"updatedAt"` CoverImage MediaCoverImage `json:"coverImage"` BannerImage string `json:"bannerImage"` Genres []string `json:"genres"` Synonyms []string `json:"synonyms"` AverageScore int `json:"averageScore"` MeanScore int `json:"meanScore"` Popularity int `json:"popularity"` Locked bool `json:"isLocked"` Trending int `json:"trending"` Favourites int `json:"favourites"` Tags []MediaTag `json:"tags"` //TODO } type MediaTitle struct { Romaji string `json:"romaji"` English string `json:"english"` Native string `json:"native"` UserPreferred string `json:"userPreferred"` } type MediaType string const ( MediaTypeAnime MediaType = "ANIME" MediaTypeManga MediaType = "MANGA" ) type MediaFormat string const ( MediaFormatTV MediaFormat = "TV" MediaFormatTVShort MediaFormat = "TV_SHORT" MediaFormatMovie MediaFormat = "MOVIE" MediaFormatSpecial MediaFormat = "SPECIAL" MediaFormatOVA MediaFormat = "OVA" MediaFormatONA MediaFormat = "ONA" MediaFormatMusic MediaFormat = "MUSIC" MediaFormatManga MediaFormat = "MANGA" MediaFormatNovel MediaFormat = "NOVEL" MediaFormatOneShot MediaFormat = "ONE_SHOT" ) type MediaStatus string const ( MediaStatusFinished MediaStatus = "FINISHED" MediaStatusReleasing MediaStatus = "RELEASING" MediaStatusNotYetReleased MediaStatus = "NOT_YET_RELEASED" MediaStatusCancelled MediaStatus = "CANCELLED" ) type MediaSeason string const ( MediaSeasonWinter MediaSeason = "WINTER" MediaSeasonSpring MediaSeason = "SPRING" MediaSeasonSummer MediaSeason = "SUMMER" MediaSeasonFall MediaSeason = "FALL" ) type MediaSource string const ( MediaSourceOriginal MediaSource = "ORIGINAL" MediaSourceManga MediaSource = "MANGA" MediaSourceLightNovel MediaSource = "LIGHT_NOVEL" MediaSourceVisualNovel MediaSource = "VISUAL_NOVEL" MediaSourceVideoGame MediaSource = "VIDEO_GAME" MediaSourceOther MediaSource = "OTHER" MediaSourceNovel MediaSource = "NOVEL" MediaSourceDoujinshi MediaSource = "DOUJINSHI" MediaSourceAnime MediaSource = "ANIME" MediaSourceWebNovel MediaSource = "WEB_NOVEL" MediaSourceLiveAction MediaSource = "LIVE_ACTION" MediaSourceGame MediaSource = "GAME" MediaSourceComic MediaSource = "COMIC" MediaSourceMultimediaProject MediaSource = "MULTIMEDIA_PROJECT" MediaSourcePictureBook MediaSource = "PICTURE_BOOK" ) type MediaTrailer struct { ID string `json:"id"` Site string `json:"site"` Thumbnail string `json:"thumbnail"` } type MediaCoverImage struct { ExtraLarge string `json:"extraLarge"` Large string `json:"large"` Medium string `json:"medium"` Color string `json:"color"` } type MediaTag struct { ID int `json:"id"` Name string `json:"name"` Description string `json:"description"` Category string `json:"category"` Rank int `json:"rank"` GeneralSpoiler bool `json:"isGeneralSpoiler"` MediaSpoiler bool `json:"isMediaSpoiler"` Adult bool `json:"isAdult"` UserID int `json:"userId"` } type FuzzyDate struct { Year int `json:"year"` Month int `json:"month"` Day int `json:"day"` } func (d FuzzyDate) Time() time.Time { return time.Date(d.Year, time.Month(d.Month), d.Day, 0, 0, 0, 0, time.UTC) } type FuzzyDateInt int // YYYYMMDD func (d FuzzyDateInt) Time() time.Time { year, month, day := int(d/10000), int(d/100%100), int(d%100) return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC) } type UnixTime int64 func (t UnixTime) Time() time.Time { return time.Unix(int64(t), 0) } type Minutes int func (d Minutes) Duration() time.Duration { return time.Duration(d) * time.Minute } type Seconds int func (d Seconds) Duration() time.Duration { return time.Duration(d) * time.Second } type MediaList struct { ID int `json:"id"` UserID int `json:"userId"` MediaID int `json:"mediaId"` Status MediaListStatus `json:"status"` Score float64 `json:"score"` Progress int `json:"progress"` ProgressVolumes int `json:"progressVolumes"` Repeat int `json:"repeat"` Priority int `json:"priority"` Private bool `json:"private"` Notes string `json:"notes"` HiddenFromStatusLists bool `json:"hiddenFromStatusLists"` StartedAt FuzzyDate `json:"startedAt"` CompletedAt FuzzyDate `json:"completedAt"` UpdatedAt UnixTime `json:"updatedAt"` CreatedAt UnixTime `json:"createdAt"` Media *Media `json:"media"` User *User `json:"user"` } type MediaListStatus string const ( MediaListStatusCurrent MediaSource = "CURRENT" MediaListStatusPlanning MediaSource = "PLANNING" MediaListStatusCompleted MediaSource = "COMPLETED" MediaListStatusDropped MediaSource = "DROPPED" MediaListStatusPaused MediaSource = "PAUSED" MediaListStatusRepeating MediaSource = "REPEATING" ) type AiringSchedule struct { ID int `json:"id"` MediaID int `json:"mediaId"` AiringAt UnixTime `json:"airingAt"` TimeUntilAiring Seconds `json:"timeUntilAiring"` Episode int `json:"episode"` Media *Media `json:"media"` }