All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #114
180 lines
3.5 KiB
Go
180 lines
3.5 KiB
Go
package twhelp
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
type ErrorCode string
|
|
|
|
const (
|
|
ErrorCodeInternalServerError ErrorCode = "internal-server-error"
|
|
ErrorCodeEntityNotFound ErrorCode = "entity-not-found"
|
|
ErrorCodeValidationError ErrorCode = "validation-error"
|
|
ErrorCodeRouteNotFound ErrorCode = "route-not-found"
|
|
ErrorCodeMethodNotAllowed ErrorCode = "method-not-allowed"
|
|
)
|
|
|
|
func (c ErrorCode) String() string {
|
|
return string(c)
|
|
}
|
|
|
|
type APIError struct {
|
|
Code ErrorCode `json:"code"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
func (e APIError) Error() string {
|
|
return e.Message + " (code=" + e.Code.String() + ")"
|
|
}
|
|
|
|
type errorResp struct {
|
|
Error APIError `json:"error"`
|
|
}
|
|
|
|
type Version struct {
|
|
Code string `json:"code"`
|
|
Host string `json:"host"`
|
|
Name string `json:"name"`
|
|
Timezone string `json:"timezone"`
|
|
}
|
|
|
|
type listVersionsResp struct {
|
|
Data []Version `json:"data"`
|
|
}
|
|
|
|
type Server struct {
|
|
Key string `json:"key"`
|
|
URL string `json:"url"`
|
|
Open bool `json:"open"`
|
|
}
|
|
|
|
type getServerResp struct {
|
|
Data Server `json:"data"`
|
|
}
|
|
|
|
type listServersResp struct {
|
|
Data []Server `json:"data"`
|
|
}
|
|
|
|
type Tribe struct {
|
|
ID int64 `json:"id"`
|
|
Tag string `json:"tag"`
|
|
Name string `json:"name"`
|
|
ProfileURL string `json:"profileUrl"`
|
|
DeletedAt time.Time `json:"deletedAt"`
|
|
}
|
|
|
|
type listTribesResp struct {
|
|
Data []Tribe `json:"data"`
|
|
}
|
|
|
|
type getTribeResp struct {
|
|
Data Tribe `json:"data"`
|
|
}
|
|
|
|
type TribeMeta struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Tag string `json:"tag"`
|
|
ProfileURL string `json:"profileUrl"`
|
|
}
|
|
|
|
type NullTribeMeta struct {
|
|
Tribe TribeMeta
|
|
Valid bool
|
|
}
|
|
|
|
func (t NullTribeMeta) MarshalJSON() ([]byte, error) {
|
|
if !t.Valid {
|
|
return []byte("null"), nil
|
|
}
|
|
|
|
return json.Marshal(t.Tribe)
|
|
}
|
|
|
|
func (t *NullTribeMeta) UnmarshalJSON(data []byte) error {
|
|
// Ignore null, like in the main JSON package.
|
|
if string(data) == "null" {
|
|
return nil
|
|
}
|
|
|
|
if err := json.Unmarshal(data, &t.Tribe); err != nil {
|
|
return err
|
|
}
|
|
|
|
t.Valid = true
|
|
|
|
return nil
|
|
}
|
|
|
|
type PlayerMeta struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
ProfileURL string `json:"profileUrl"`
|
|
Tribe NullTribeMeta `json:"tribe"`
|
|
}
|
|
|
|
type NullPlayerMeta struct {
|
|
Player PlayerMeta
|
|
Valid bool
|
|
}
|
|
|
|
func (p NullPlayerMeta) MarshalJSON() ([]byte, error) {
|
|
if !p.Valid {
|
|
return []byte("null"), nil
|
|
}
|
|
|
|
return json.Marshal(p.Player)
|
|
}
|
|
|
|
func (p *NullPlayerMeta) UnmarshalJSON(data []byte) error {
|
|
// Ignore null, like in the main JSON package.
|
|
if string(data) == "null" {
|
|
return nil
|
|
}
|
|
|
|
if err := json.Unmarshal(data, &p.Player); err != nil {
|
|
return err
|
|
}
|
|
|
|
p.Valid = true
|
|
|
|
return nil
|
|
}
|
|
|
|
type VillageMeta struct {
|
|
ID int64 `json:"id"`
|
|
FullName string `json:"fullName"`
|
|
ProfileURL string `json:"profileUrl"`
|
|
Player NullPlayerMeta `json:"player"`
|
|
}
|
|
|
|
type Ennoblement struct {
|
|
ID int64 `json:"id"`
|
|
Village VillageMeta `json:"village"`
|
|
NewOwner NullPlayerMeta `json:"newOwner"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type listEnnoblementsResp struct {
|
|
Data []Ennoblement `json:"data"`
|
|
}
|
|
|
|
type NullBool struct {
|
|
Bool bool
|
|
Valid bool // Valid is true if Bool is not NULL
|
|
}
|
|
|
|
type Village struct {
|
|
ID int64 `json:"id"`
|
|
FullName string `json:"fullName"`
|
|
ProfileURL string `json:"profileUrl"`
|
|
Points int64 `json:"points"`
|
|
Player NullPlayerMeta `json:"player"`
|
|
}
|
|
|
|
type listVillagesResp struct {
|
|
Data []Village `json:"data"`
|
|
}
|