Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
de98e6f444 | |||
07d1f0962a | |||
e5e717f3e1 | |||
79d24f2ba0 | |||
573c398f76 |
@ -2,7 +2,7 @@ package anilist
|
|||||||
|
|
||||||
import "context"
|
import "context"
|
||||||
|
|
||||||
func (api *Api) GetAiringSchedule(ctx context.Context, vars AiringScheduleQuery, onError func(error)) Cursor[AiringSchedule] {
|
func (api *Api) GetAiringSchedule(ctx context.Context, vars AiringScheduleQuery, onError func(error)) *Cursor[AiringSchedule] {
|
||||||
resp := responseObj[*page[AiringSchedule]]{}
|
resp := responseObj[*page[AiringSchedule]]{}
|
||||||
return requestPaged(api, ctx, getAiringScheduleQuery, vars.toMap(), &resp, onError)
|
return requestPaged(api, ctx, getAiringScheduleQuery, vars.toMap(), &resp, onError)
|
||||||
}
|
}
|
||||||
|
4
api.go
4
api.go
@ -61,7 +61,7 @@ func request[T any](api *Api, query string, vars map[string]interface{}, respObj
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func requestPaged[R any](api *Api, ctx context.Context, query string, vars map[string]interface{}, respObj *responseObj[*page[R]], onError func(error)) Cursor[R] {
|
func requestPaged[R any](api *Api, ctx context.Context, query string, vars map[string]interface{}, respObj *responseObj[*page[R]], onError func(error)) *Cursor[R] {
|
||||||
resp := responseObj[struct {
|
resp := responseObj[struct {
|
||||||
Page *page[R] `json:"Page"`
|
Page *page[R] `json:"Page"`
|
||||||
}]{}
|
}]{}
|
||||||
@ -105,7 +105,7 @@ func requestPaged[R any](api *Api, ctx context.Context, query string, vars map[s
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return Cursor[R]{
|
return &Cursor[R]{
|
||||||
Chan: out,
|
Chan: out,
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
cancelFunc: cancelFunc,
|
cancelFunc: cancelFunc,
|
||||||
|
10
cursor.go
10
cursor.go
@ -8,12 +8,16 @@ type Cursor[T any] struct {
|
|||||||
Chan <-chan *T
|
Chan <-chan *T
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Cursor[T]) First() *T {
|
func (c *Cursor[T]) First() *T {
|
||||||
defer c.cancelFunc()
|
defer c.cancelFunc()
|
||||||
return <-c.Chan
|
return <-c.Chan
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Cursor[T]) Next() (*T, bool) {
|
func (c *Cursor[T]) Close() {
|
||||||
|
c.cancelFunc()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Cursor[T]) Next() (*T, bool) {
|
||||||
if c.ctx.Err() == nil {
|
if c.ctx.Err() == nil {
|
||||||
value, ok := <-c.Chan
|
value, ok := <-c.Chan
|
||||||
return value, ok
|
return value, ok
|
||||||
@ -22,7 +26,7 @@ func (c Cursor[T]) Next() (*T, bool) {
|
|||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Cursor[T]) Slice() []T {
|
func (c *Cursor[T]) Slice() []T {
|
||||||
s := make([]T, 0)
|
s := make([]T, 0)
|
||||||
for value, ok := c.Next(); ok; value, ok = c.Next() {
|
for value, ok := c.Next(); ok; value, ok = c.Next() {
|
||||||
s = append(s, *value)
|
s = append(s, *value)
|
||||||
|
2
go.mod
2
go.mod
@ -1,3 +1,3 @@
|
|||||||
module git.tordarus.net/Tordarus/anilist
|
module git.milar.in/milarin/anilist
|
||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
2
media.go
2
media.go
@ -2,7 +2,7 @@ package anilist
|
|||||||
|
|
||||||
import "context"
|
import "context"
|
||||||
|
|
||||||
func (api *Api) GetMedia(ctx context.Context, vars MediaQuery, onError func(error)) Cursor[Media] {
|
func (api *Api) GetMedia(ctx context.Context, vars MediaQuery, onError func(error)) *Cursor[Media] {
|
||||||
resp := responseObj[*page[Media]]{}
|
resp := responseObj[*page[Media]]{}
|
||||||
return requestPaged(api, ctx, getMediaQuery, vars.toMap(), &resp, onError)
|
return requestPaged(api, ctx, getMediaQuery, vars.toMap(), &resp, onError)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package anilist
|
|||||||
|
|
||||||
import "context"
|
import "context"
|
||||||
|
|
||||||
func (api *Api) GetMediaList(ctx context.Context, vars MediaListQuery, onError func(error)) Cursor[MediaList] {
|
func (api *Api) GetMediaList(ctx context.Context, vars MediaListQuery, onError func(error)) *Cursor[MediaList] {
|
||||||
resp := responseObj[*page[MediaList]]{}
|
resp := responseObj[*page[MediaList]]{}
|
||||||
return requestPaged(api, ctx, getMediaListQuery, vars.toMap(), &resp, onError)
|
return requestPaged(api, ctx, getMediaListQuery, vars.toMap(), &resp, onError)
|
||||||
}
|
}
|
||||||
|
12
types.go
12
types.go
@ -197,12 +197,12 @@ type MediaList struct {
|
|||||||
type MediaListStatus string
|
type MediaListStatus string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MediaListStatusCurrent MediaSource = "CURRENT"
|
MediaListStatusCurrent MediaListStatus = "CURRENT"
|
||||||
MediaListStatusPlanning MediaSource = "PLANNING"
|
MediaListStatusPlanning MediaListStatus = "PLANNING"
|
||||||
MediaListStatusCompleted MediaSource = "COMPLETED"
|
MediaListStatusCompleted MediaListStatus = "COMPLETED"
|
||||||
MediaListStatusDropped MediaSource = "DROPPED"
|
MediaListStatusDropped MediaListStatus = "DROPPED"
|
||||||
MediaListStatusPaused MediaSource = "PAUSED"
|
MediaListStatusPaused MediaListStatus = "PAUSED"
|
||||||
MediaListStatusRepeating MediaSource = "REPEATING"
|
MediaListStatusRepeating MediaListStatus = "REPEATING"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AiringSchedule struct {
|
type AiringSchedule struct {
|
||||||
|
2
user.go
2
user.go
@ -44,7 +44,7 @@ func (api *Api) GetUserByID(id int) (*User, error) {
|
|||||||
return resp.Data.User, nil
|
return resp.Data.User, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *Api) SearchUsers(ctx context.Context, search string, onError func(error)) Cursor[User] {
|
func (api *Api) SearchUsers(ctx context.Context, search string, onError func(error)) *Cursor[User] {
|
||||||
vars := map[string]interface{}{"search": search}
|
vars := map[string]interface{}{"search": search}
|
||||||
resp := responseObj[*page[User]]{}
|
resp := responseObj[*page[User]]{}
|
||||||
return requestPaged(api, ctx, searchUsersQuery, vars, &resp, onError)
|
return requestPaged(api, ctx, searchUsersQuery, vars, &resp, onError)
|
||||||
|
Reference in New Issue
Block a user