191 lines
6.1 KiB
Go
191 lines
6.1 KiB
Go
package rest
|
|
|
|
import "encoding/json"
|
|
|
|
type Command struct {
|
|
Actor string `json:"actor" binding:"required,notblank"`
|
|
Commands []json.RawMessage `json:"cmd" binding:"min=1"`
|
|
}
|
|
|
|
type CommandType string
|
|
|
|
const (
|
|
CommandTypeRaceQuit CommandType = "raceQuit"
|
|
CommandTypeRaceVote CommandType = "raceVote"
|
|
CommandTypeRaceRelation CommandType = "raceRelation"
|
|
CommandTypeShipClassCreate CommandType = "shipClassCreate"
|
|
CommandTypeShipClassMerge CommandType = "shipClassMerge"
|
|
CommandTypeShipClassRemove CommandType = "shipClassRemove"
|
|
CommandTypeShipGroupBreak CommandType = "shipGroupBreak"
|
|
CommandTypeShipGroupLoad CommandType = "shipGroupLoad"
|
|
CommandTypeShipGroupUnload CommandType = "shipGroupUnload"
|
|
CommandTypeShipGroupSend CommandType = "shipGroupSend"
|
|
CommandTypeShipGroupUpgrade CommandType = "shipGroupUpgrade"
|
|
CommandTypeShipGroupMerge CommandType = "shipGroupMerge"
|
|
CommandTypeShipGroupDismantle CommandType = "shipGroupDismantle"
|
|
CommandTypeShipGroupTransfer CommandType = "shipGroupTransfer"
|
|
CommandTypeShipGroupJoinFleet CommandType = "shipGroupJoinFleet"
|
|
CommandTypeFleetMerge CommandType = "fleetMerge"
|
|
CommandTypeFleetSend CommandType = "fleetSend"
|
|
CommandTypeScienceCreate CommandType = "scienceCreate"
|
|
CommandTypeScienceRemove CommandType = "scienceRemove"
|
|
CommandTypePlanetRename CommandType = "planetRename"
|
|
CommandTypePlanetProduce CommandType = "planetProduce"
|
|
CommandTypePlanetRouteSet CommandType = "planetRouteSet"
|
|
CommandTypePlanetRouteRemove CommandType = "planetRouteRemove"
|
|
)
|
|
|
|
type DecodableCommand interface {
|
|
CommandType() CommandType
|
|
}
|
|
|
|
type CommandMeta struct {
|
|
Type CommandType `json:"@type" binding:"required,notblank"`
|
|
}
|
|
|
|
func (cm CommandMeta) CommandType() CommandType {
|
|
return cm.Type
|
|
}
|
|
|
|
type CommandRaceQuit struct {
|
|
CommandMeta
|
|
}
|
|
|
|
type CommandRaceVote struct {
|
|
CommandMeta
|
|
Acceptor string `json:"acceptor" binding:"required,notblank"`
|
|
}
|
|
|
|
type CommandRaceRelation struct {
|
|
CommandMeta
|
|
Acceptor string `json:"acceptor" binding:"required,notblank"`
|
|
Relation string `json:"relation" binding:"required,notblank"`
|
|
}
|
|
|
|
type CommandShipClassCreate struct {
|
|
CommandMeta
|
|
Name string `json:"name" binding:"required,notblank,entity"`
|
|
Drive float64 `json:"drive" binding:"eq=0|gte=1"`
|
|
Armament int `json:"armament" binding:"ammoWeapons=Weapons"`
|
|
Weapons float64 `json:"weapons" binding:"ammoWeapons=Armament"`
|
|
Shields float64 `json:"shields" binding:"eq=0|gte=1"`
|
|
Cargo float64 `json:"cargo" binding:"eq=0|gte=1"`
|
|
}
|
|
|
|
type CommandShipClassMerge struct {
|
|
CommandMeta
|
|
Name string `json:"name" binding:"required,notblank,entity,nefield=Target"`
|
|
Target string `json:"target" binding:"required,notblank,entity,nefield=Class"`
|
|
}
|
|
|
|
type CommandShipClassRemove struct {
|
|
CommandMeta
|
|
Name string `json:"name" binding:"required,notblank,entity"`
|
|
}
|
|
|
|
type CommandShipGroupLoad struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
Cargo string `json:"cargo" binding:"required,notblank,oneof=COL MAT CAP"`
|
|
Quantity float64 `json:"quantity" binding:"gte=0"`
|
|
}
|
|
|
|
type CommandShipGroupUnload struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
Quantity float64 `json:"quantity" binding:"gte=0"`
|
|
}
|
|
|
|
type CommandShipGroupSend struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
Destination int `json:"planetNumber" binding:"gte=0"`
|
|
}
|
|
|
|
type CommandShipGroupUpgrade struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
Tech string `json:"tech" binding:"oneof=ALL DRIVE WEAPONS SHIELDS CARGO"`
|
|
Level float64 `json:"level" binding:"gte=1"`
|
|
}
|
|
|
|
type CommandShipGroupMerge struct {
|
|
CommandMeta
|
|
}
|
|
|
|
type CommandShipGroupBreak struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
NewID string `json:"newId" binding:"required,uuid_rfc4122"`
|
|
Quantity int `json:"quantity" binding:"gte=0"`
|
|
}
|
|
|
|
type CommandShipGroupDismantle struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
}
|
|
|
|
type CommandShipGroupTransfer struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
Acceptor string `json:"acceptor" binding:"required,notblank"`
|
|
}
|
|
|
|
type CommandShipGroupJoinFleet struct {
|
|
CommandMeta
|
|
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
|
Name string `json:"name" binding:"required,notblank,entity"`
|
|
}
|
|
|
|
type CommandFleetMerge struct {
|
|
CommandMeta
|
|
Name string `json:"name" binding:"required,notblank,entity,nefield=Target"`
|
|
Target string `json:"target" binding:"required,notblank,entity,nefield=Name"`
|
|
}
|
|
|
|
type CommandFleetSend struct {
|
|
CommandMeta
|
|
Name string `json:"name" binding:"required,notblank,entity"`
|
|
Destination int `json:"planetNumber" binding:"gte=0"`
|
|
}
|
|
|
|
type CommandScienceCreate struct {
|
|
CommandMeta
|
|
Name string `json:"name" binding:"required,notblank,entity"`
|
|
Drive float64 `json:"drive" binding:"gte=0,lte=1"`
|
|
Weapons float64 `json:"weapons" binding:"gte=0,lte=1"`
|
|
Shields float64 `json:"shields" binding:"gte=0,lte=1"`
|
|
Cargo float64 `json:"cargo" binding:"gte=0,lte=1"`
|
|
}
|
|
|
|
type CommandScienceRemove struct {
|
|
CommandMeta
|
|
Name string `json:"name" binding:"required,notblank,entity"`
|
|
}
|
|
|
|
type CommandPlanetRename struct {
|
|
CommandMeta
|
|
Number int `json:"planetNumber" binding:"gte=0"`
|
|
Name string `json:"name" binding:"required,notblank,entity"`
|
|
}
|
|
|
|
type CommandPlanetProduce struct {
|
|
CommandMeta
|
|
Number int `json:"planetNumber" binding:"gte=0"`
|
|
Production string `json:"production" binding:"oneof=MAT CAP DRIVE WEAPONS SHIELDS CARGO SCIENCE SHIP"`
|
|
Subject string `json:"subject" binding:"subject"`
|
|
}
|
|
|
|
type CommandPlanetRouteSet struct {
|
|
CommandMeta
|
|
Origin int `json:"fromPlanetNumber" binding:"gte=0,nefield=Destination"`
|
|
Destination int `json:"toPlanetNumber" binding:"gte=0,nefield=Number"`
|
|
LoadType string `json:"loadType" binding:"oneof=MAT CAP COL EMP"`
|
|
}
|
|
|
|
type CommandPlanetRouteRemove struct {
|
|
CommandMeta
|
|
Origin int `json:"fromPlanetNumber" binding:"gte=0,nefield=Destination"`
|
|
LoadType string `json:"loadType" binding:"oneof=MAT CAP COL EMP"`
|
|
}
|