// Package api provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. package api import ( "bytes" "compress/gzip" "context" "encoding/base64" "encoding/json" "fmt" "net/http" "net/url" "path" "strings" "github.com/getkin/kin-openapi/openapi3" "github.com/labstack/echo/v4" "github.com/oapi-codegen/nullable" "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" ) // Defines values for ExecutionStatus. const ( CompileError ExecutionStatus = "compile_error" InternalError ExecutionStatus = "internal_error" None ExecutionStatus = "none" Running ExecutionStatus = "running" RuntimeError ExecutionStatus = "runtime_error" Success ExecutionStatus = "success" Timeout ExecutionStatus = "timeout" WrongAnswer ExecutionStatus = "wrong_answer" ) // Defines values for GameType. const ( Multiplayer GameType = "multiplayer" N1V1 GameType = "1v1" ) // Defines values for ProblemLanguage. const ( Php ProblemLanguage = "php" Swift ProblemLanguage = "swift" ) // Error defines model for Error. type Error struct { Message string `json:"message"` } // ExecutionStatus defines model for ExecutionStatus. type ExecutionStatus string // Game defines model for Game. type Game struct { DisplayName string `json:"display_name"` DurationSeconds int `json:"duration_seconds"` GameID int `json:"game_id"` GameType GameType `json:"game_type"` IsPublic bool `json:"is_public"` MainPlayers []User `json:"main_players"` Problem Problem `json:"problem"` StartedAt *int64 `json:"started_at,omitempty"` } // GameType defines model for GameType. type GameType string // LatestGameState defines model for LatestGameState. type LatestGameState struct { BestScoreSubmittedAt nullable.Nullable[int64] `json:"best_score_submitted_at"` Code string `json:"code"` Score nullable.Nullable[int] `json:"score"` Status ExecutionStatus `json:"status"` } // Problem defines model for Problem. type Problem struct { Description string `json:"description"` Language ProblemLanguage `json:"language"` ProblemID int `json:"problem_id"` SampleCode string `json:"sample_code"` Title string `json:"title"` } // ProblemLanguage defines model for ProblemLanguage. type ProblemLanguage string // RankingEntry defines model for RankingEntry. type RankingEntry struct { Code nullable.Nullable[string] `json:"code"` Player User `json:"player"` Score int `json:"score"` SubmittedAt int64 `json:"submitted_at"` } // Submission defines model for Submission. type Submission struct { Code string `json:"code"` CodeSize int `json:"code_size"` CreatedAt int64 `json:"created_at"` GameID int `json:"game_id"` Status ExecutionStatus `json:"status"` SubmissionID int `json:"submission_id"` } // Tournament defines model for Tournament. type Tournament struct { BracketSize int `json:"bracket_size"` DisplayName string `json:"display_name"` Entries []TournamentEntry `json:"entries"` Matches []TournamentMatch `json:"matches"` NumRounds int `json:"num_rounds"` TournamentID int `json:"tournament_id"` } // TournamentEntry defines model for TournamentEntry. type TournamentEntry struct { Seed int `json:"seed"` User User `json:"user"` } // TournamentMatch defines model for TournamentMatch. type TournamentMatch struct { GameID *int `json:"game_id,omitempty"` IsBye bool `json:"is_bye"` Player1 *User `json:"player1,omitempty"` Player1Score *int `json:"player1_score,omitempty"` Player2 *User `json:"player2,omitempty"` Player2Score *int `json:"player2_score,omitempty"` Position int `json:"position"` Round int `json:"round"` TournamentMatchID int `json:"tournament_match_id"` WinnerUserID *int `json:"winner_user_id,omitempty"` } // User defines model for User. type User struct { DisplayName string `json:"display_name"` IconPath *string `json:"icon_path,omitempty"` IsAdmin bool `json:"is_admin"` Label nullable.Nullable[string] `json:"label"` UserID int `json:"user_id"` Username string `json:"username"` } // PostGamePlayCodeJSONBody defines parameters for PostGamePlayCode. type PostGamePlayCodeJSONBody struct { Code string `json:"code"` } // PostGamePlaySubmitJSONBody defines parameters for PostGamePlaySubmit. type PostGamePlaySubmitJSONBody struct { Code string `json:"code"` } // PostLoginJSONBody defines parameters for PostLogin. type PostLoginJSONBody struct { Password string `json:"password"` Username string `json:"username"` } // PostGamePlayCodeJSONRequestBody defines body for PostGamePlayCode for application/json ContentType. type PostGamePlayCodeJSONRequestBody PostGamePlayCodeJSONBody // PostGamePlaySubmitJSONRequestBody defines body for PostGamePlaySubmit for application/json ContentType. type PostGamePlaySubmitJSONRequestBody PostGamePlaySubmitJSONBody // PostLoginJSONRequestBody defines body for PostLogin for application/json ContentType. type PostLoginJSONRequestBody PostLoginJSONBody // ServerInterface represents all server handlers. type ServerInterface interface { // (GET /games) GetGames(ctx echo.Context) error // (GET /games/{game_id}) GetGame(ctx echo.Context, gameID int) error // (POST /games/{game_id}/play/code) PostGamePlayCode(ctx echo.Context, gameID int) error // (GET /games/{game_id}/play/latest_state) GetGamePlayLatestState(ctx echo.Context, gameID int) error // (GET /games/{game_id}/play/submissions) GetGamePlaySubmissions(ctx echo.Context, gameID int) error // (POST /games/{game_id}/play/submit) PostGamePlaySubmit(ctx echo.Context, gameID int) error // (GET /games/{game_id}/watch/latest_states) GetGameWatchLatestStates(ctx echo.Context, gameID int) error // (GET /games/{game_id}/watch/ranking) GetGameWatchRanking(ctx echo.Context, gameID int) error // (POST /login) PostLogin(ctx echo.Context) error // (POST /logout) PostLogout(ctx echo.Context) error // (GET /me) GetMe(ctx echo.Context) error // (GET /tournaments/{tournament_id}) GetTournament(ctx echo.Context, tournamentID int) error } // ServerInterfaceWrapper converts echo contexts to parameters. type ServerInterfaceWrapper struct { Handler ServerInterface } // GetGames converts echo context to params. func (w *ServerInterfaceWrapper) GetGames(ctx echo.Context) error { var err error // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetGames(ctx) return err } // GetGame converts echo context to params. func (w *ServerInterfaceWrapper) GetGame(ctx echo.Context) error { var err error // ------------- Path parameter "game_id" ------------- var gameID int err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetGame(ctx, gameID) return err } // PostGamePlayCode converts echo context to params. func (w *ServerInterfaceWrapper) PostGamePlayCode(ctx echo.Context) error { var err error // ------------- Path parameter "game_id" ------------- var gameID int err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.PostGamePlayCode(ctx, gameID) return err } // GetGamePlayLatestState converts echo context to params. func (w *ServerInterfaceWrapper) GetGamePlayLatestState(ctx echo.Context) error { var err error // ------------- Path parameter "game_id" ------------- var gameID int err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetGamePlayLatestState(ctx, gameID) return err } // GetGamePlaySubmissions converts echo context to params. func (w *ServerInterfaceWrapper) GetGamePlaySubmissions(ctx echo.Context) error { var err error // ------------- Path parameter "game_id" ------------- var gameID int err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetGamePlaySubmissions(ctx, gameID) return err } // PostGamePlaySubmit converts echo context to params. func (w *ServerInterfaceWrapper) PostGamePlaySubmit(ctx echo.Context) error { var err error // ------------- Path parameter "game_id" ------------- var gameID int err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.PostGamePlaySubmit(ctx, gameID) return err } // GetGameWatchLatestStates converts echo context to params. func (w *ServerInterfaceWrapper) GetGameWatchLatestStates(ctx echo.Context) error { var err error // ------------- Path parameter "game_id" ------------- var gameID int err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetGameWatchLatestStates(ctx, gameID) return err } // GetGameWatchRanking converts echo context to params. func (w *ServerInterfaceWrapper) GetGameWatchRanking(ctx echo.Context) error { var err error // ------------- Path parameter "game_id" ------------- var gameID int err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetGameWatchRanking(ctx, gameID) return err } // PostLogin converts echo context to params. func (w *ServerInterfaceWrapper) PostLogin(ctx echo.Context) error { var err error // Invoke the callback with all the unmarshaled arguments err = w.Handler.PostLogin(ctx) return err } // PostLogout converts echo context to params. func (w *ServerInterfaceWrapper) PostLogout(ctx echo.Context) error { var err error // Invoke the callback with all the unmarshaled arguments err = w.Handler.PostLogout(ctx) return err } // GetMe converts echo context to params. func (w *ServerInterfaceWrapper) GetMe(ctx echo.Context) error { var err error // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetMe(ctx) return err } // GetTournament converts echo context to params. func (w *ServerInterfaceWrapper) GetTournament(ctx echo.Context) error { var err error // ------------- Path parameter "tournament_id" ------------- var tournamentID int err = runtime.BindStyledParameterWithOptions("simple", "tournament_id", ctx.Param("tournament_id"), &tournamentID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter tournament_id: %s", err)) } // Invoke the callback with all the unmarshaled arguments err = w.Handler.GetTournament(ctx, tournamentID) return err } // This is a simple interface which specifies echo.Route addition functions which // are present on both echo.Echo and echo.Group, since we want to allow using // either of them for path registration type EchoRouter interface { CONNECT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route DELETE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route GET(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route HEAD(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route OPTIONS(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route PATCH(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route POST(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route PUT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route TRACE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route } // RegisterHandlers adds each server route to the EchoRouter. func RegisterHandlers(router EchoRouter, si ServerInterface) { RegisterHandlersWithBaseURL(router, si, "") } // Registers handlers, and prepends BaseURL to the paths, so that the paths // can be served under a prefix. func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL string) { wrapper := ServerInterfaceWrapper{ Handler: si, } router.GET(baseURL+"/games", wrapper.GetGames) router.GET(baseURL+"/games/:game_id", wrapper.GetGame) router.POST(baseURL+"/games/:game_id/play/code", wrapper.PostGamePlayCode) router.GET(baseURL+"/games/:game_id/play/latest_state", wrapper.GetGamePlayLatestState) router.GET(baseURL+"/games/:game_id/play/submissions", wrapper.GetGamePlaySubmissions) router.POST(baseURL+"/games/:game_id/play/submit", wrapper.PostGamePlaySubmit) router.GET(baseURL+"/games/:game_id/watch/latest_states", wrapper.GetGameWatchLatestStates) router.GET(baseURL+"/games/:game_id/watch/ranking", wrapper.GetGameWatchRanking) router.POST(baseURL+"/login", wrapper.PostLogin) router.POST(baseURL+"/logout", wrapper.PostLogout) router.GET(baseURL+"/me", wrapper.GetMe) router.GET(baseURL+"/tournaments/:tournament_id", wrapper.GetTournament) } type GetGamesRequestObject struct { } type GetGamesResponseObject interface { VisitGetGamesResponse(w http.ResponseWriter) error } type GetGames200JSONResponse struct { Games []Game `json:"games"` } func (response GetGames200JSONResponse) VisitGetGamesResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetGames401JSONResponse Error func (response GetGames401JSONResponse) VisitGetGamesResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetGames403JSONResponse Error func (response GetGames403JSONResponse) VisitGetGamesResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type GetGameRequestObject struct { GameID int `json:"game_id"` } type GetGameResponseObject interface { VisitGetGameResponse(w http.ResponseWriter) error } type GetGame200JSONResponse struct { Game Game `json:"game"` } func (response GetGame200JSONResponse) VisitGetGameResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetGame401JSONResponse Error func (response GetGame401JSONResponse) VisitGetGameResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetGame403JSONResponse Error func (response GetGame403JSONResponse) VisitGetGameResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type GetGame404JSONResponse Error func (response GetGame404JSONResponse) VisitGetGameResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } type PostGamePlayCodeRequestObject struct { GameID int `json:"game_id"` Body *PostGamePlayCodeJSONRequestBody } type PostGamePlayCodeResponseObject interface { VisitPostGamePlayCodeResponse(w http.ResponseWriter) error } type PostGamePlayCode200Response struct { } func (response PostGamePlayCode200Response) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error { w.WriteHeader(200) return nil } type PostGamePlayCode401JSONResponse Error func (response PostGamePlayCode401JSONResponse) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type PostGamePlayCode403JSONResponse Error func (response PostGamePlayCode403JSONResponse) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type PostGamePlayCode404JSONResponse Error func (response PostGamePlayCode404JSONResponse) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } type GetGamePlayLatestStateRequestObject struct { GameID int `json:"game_id"` } type GetGamePlayLatestStateResponseObject interface { VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error } type GetGamePlayLatestState200JSONResponse struct { State LatestGameState `json:"state"` } func (response GetGamePlayLatestState200JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetGamePlayLatestState401JSONResponse Error func (response GetGamePlayLatestState401JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetGamePlayLatestState403JSONResponse Error func (response GetGamePlayLatestState403JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type GetGamePlayLatestState404JSONResponse Error func (response GetGamePlayLatestState404JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } type GetGamePlaySubmissionsRequestObject struct { GameID int `json:"game_id"` } type GetGamePlaySubmissionsResponseObject interface { VisitGetGamePlaySubmissionsResponse(w http.ResponseWriter) error } type GetGamePlaySubmissions200JSONResponse struct { Submissions []Submission `json:"submissions"` } func (response GetGamePlaySubmissions200JSONResponse) VisitGetGamePlaySubmissionsResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetGamePlaySubmissions401JSONResponse Error func (response GetGamePlaySubmissions401JSONResponse) VisitGetGamePlaySubmissionsResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetGamePlaySubmissions403JSONResponse Error func (response GetGamePlaySubmissions403JSONResponse) VisitGetGamePlaySubmissionsResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type GetGamePlaySubmissions404JSONResponse Error func (response GetGamePlaySubmissions404JSONResponse) VisitGetGamePlaySubmissionsResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } type PostGamePlaySubmitRequestObject struct { GameID int `json:"game_id"` Body *PostGamePlaySubmitJSONRequestBody } type PostGamePlaySubmitResponseObject interface { VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error } type PostGamePlaySubmit200Response struct { } func (response PostGamePlaySubmit200Response) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error { w.WriteHeader(200) return nil } type PostGamePlaySubmit401JSONResponse Error func (response PostGamePlaySubmit401JSONResponse) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type PostGamePlaySubmit403JSONResponse Error func (response PostGamePlaySubmit403JSONResponse) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type PostGamePlaySubmit404JSONResponse Error func (response PostGamePlaySubmit404JSONResponse) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } type GetGameWatchLatestStatesRequestObject struct { GameID int `json:"game_id"` } type GetGameWatchLatestStatesResponseObject interface { VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error } type GetGameWatchLatestStates200JSONResponse struct { States map[string]LatestGameState `json:"states"` } func (response GetGameWatchLatestStates200JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetGameWatchLatestStates401JSONResponse Error func (response GetGameWatchLatestStates401JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetGameWatchLatestStates403JSONResponse Error func (response GetGameWatchLatestStates403JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type GetGameWatchLatestStates404JSONResponse Error func (response GetGameWatchLatestStates404JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } type GetGameWatchRankingRequestObject struct { GameID int `json:"game_id"` } type GetGameWatchRankingResponseObject interface { VisitGetGameWatchRankingResponse(w http.ResponseWriter) error } type GetGameWatchRanking200JSONResponse struct { Ranking []RankingEntry `json:"ranking"` } func (response GetGameWatchRanking200JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetGameWatchRanking401JSONResponse Error func (response GetGameWatchRanking401JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetGameWatchRanking403JSONResponse Error func (response GetGameWatchRanking403JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type GetGameWatchRanking404JSONResponse Error func (response GetGameWatchRanking404JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } type PostLoginRequestObject struct { Body *PostLoginJSONRequestBody } type PostLoginResponseObject interface { VisitPostLoginResponse(w http.ResponseWriter) error } type PostLogin200JSONResponse struct { User User `json:"user"` } func (response PostLogin200JSONResponse) VisitPostLoginResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type PostLogin401JSONResponse Error func (response PostLogin401JSONResponse) VisitPostLoginResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type PostLogoutRequestObject struct { } type PostLogoutResponseObject interface { VisitPostLogoutResponse(w http.ResponseWriter) error } type PostLogout200Response struct { } func (response PostLogout200Response) VisitPostLogoutResponse(w http.ResponseWriter) error { w.WriteHeader(200) return nil } type PostLogout401JSONResponse Error func (response PostLogout401JSONResponse) VisitPostLogoutResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetMeRequestObject struct { } type GetMeResponseObject interface { VisitGetMeResponse(w http.ResponseWriter) error } type GetMe200JSONResponse struct { User User `json:"user"` } func (response GetMe200JSONResponse) VisitGetMeResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetMe401JSONResponse Error func (response GetMe401JSONResponse) VisitGetMeResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetTournamentRequestObject struct { TournamentID int `json:"tournament_id"` } type GetTournamentResponseObject interface { VisitGetTournamentResponse(w http.ResponseWriter) error } type GetTournament200JSONResponse struct { Tournament Tournament `json:"tournament"` } func (response GetTournament200JSONResponse) VisitGetTournamentResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } type GetTournament401JSONResponse Error func (response GetTournament401JSONResponse) VisitGetTournamentResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(401) return json.NewEncoder(w).Encode(response) } type GetTournament403JSONResponse Error func (response GetTournament403JSONResponse) VisitGetTournamentResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(403) return json.NewEncoder(w).Encode(response) } type GetTournament404JSONResponse Error func (response GetTournament404JSONResponse) VisitGetTournamentResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) return json.NewEncoder(w).Encode(response) } // StrictServerInterface represents all server handlers. type StrictServerInterface interface { // (GET /games) GetGames(ctx context.Context, request GetGamesRequestObject) (GetGamesResponseObject, error) // (GET /games/{game_id}) GetGame(ctx context.Context, request GetGameRequestObject) (GetGameResponseObject, error) // (POST /games/{game_id}/play/code) PostGamePlayCode(ctx context.Context, request PostGamePlayCodeRequestObject) (PostGamePlayCodeResponseObject, error) // (GET /games/{game_id}/play/latest_state) GetGamePlayLatestState(ctx context.Context, request GetGamePlayLatestStateRequestObject) (GetGamePlayLatestStateResponseObject, error) // (GET /games/{game_id}/play/submissions) GetGamePlaySubmissions(ctx context.Context, request GetGamePlaySubmissionsRequestObject) (GetGamePlaySubmissionsResponseObject, error) // (POST /games/{game_id}/play/submit) PostGamePlaySubmit(ctx context.Context, request PostGamePlaySubmitRequestObject) (PostGamePlaySubmitResponseObject, error) // (GET /games/{game_id}/watch/latest_states) GetGameWatchLatestStates(ctx context.Context, request GetGameWatchLatestStatesRequestObject) (GetGameWatchLatestStatesResponseObject, error) // (GET /games/{game_id}/watch/ranking) GetGameWatchRanking(ctx context.Context, request GetGameWatchRankingRequestObject) (GetGameWatchRankingResponseObject, error) // (POST /login) PostLogin(ctx context.Context, request PostLoginRequestObject) (PostLoginResponseObject, error) // (POST /logout) PostLogout(ctx context.Context, request PostLogoutRequestObject) (PostLogoutResponseObject, error) // (GET /me) GetMe(ctx context.Context, request GetMeRequestObject) (GetMeResponseObject, error) // (GET /tournaments/{tournament_id}) GetTournament(ctx context.Context, request GetTournamentRequestObject) (GetTournamentResponseObject, error) } type StrictHandlerFunc = strictecho.StrictEchoHandlerFunc type StrictMiddlewareFunc = strictecho.StrictEchoMiddlewareFunc func NewStrictHandler(ssi StrictServerInterface, middlewares []StrictMiddlewareFunc) ServerInterface { return &strictHandler{ssi: ssi, middlewares: middlewares} } type strictHandler struct { ssi StrictServerInterface middlewares []StrictMiddlewareFunc } // GetGames operation middleware func (sh *strictHandler) GetGames(ctx echo.Context) error { var request GetGamesRequestObject handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetGames(ctx.Request().Context(), request.(GetGamesRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetGames") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetGamesResponseObject); ok { return validResponse.VisitGetGamesResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetGame operation middleware func (sh *strictHandler) GetGame(ctx echo.Context, gameID int) error { var request GetGameRequestObject request.GameID = gameID handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetGame(ctx.Request().Context(), request.(GetGameRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetGame") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetGameResponseObject); ok { return validResponse.VisitGetGameResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // PostGamePlayCode operation middleware func (sh *strictHandler) PostGamePlayCode(ctx echo.Context, gameID int) error { var request PostGamePlayCodeRequestObject request.GameID = gameID var body PostGamePlayCodeJSONRequestBody if err := ctx.Bind(&body); err != nil { return err } request.Body = &body handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.PostGamePlayCode(ctx.Request().Context(), request.(PostGamePlayCodeRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "PostGamePlayCode") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(PostGamePlayCodeResponseObject); ok { return validResponse.VisitPostGamePlayCodeResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetGamePlayLatestState operation middleware func (sh *strictHandler) GetGamePlayLatestState(ctx echo.Context, gameID int) error { var request GetGamePlayLatestStateRequestObject request.GameID = gameID handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetGamePlayLatestState(ctx.Request().Context(), request.(GetGamePlayLatestStateRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetGamePlayLatestState") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetGamePlayLatestStateResponseObject); ok { return validResponse.VisitGetGamePlayLatestStateResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetGamePlaySubmissions operation middleware func (sh *strictHandler) GetGamePlaySubmissions(ctx echo.Context, gameID int) error { var request GetGamePlaySubmissionsRequestObject request.GameID = gameID handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetGamePlaySubmissions(ctx.Request().Context(), request.(GetGamePlaySubmissionsRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetGamePlaySubmissions") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetGamePlaySubmissionsResponseObject); ok { return validResponse.VisitGetGamePlaySubmissionsResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // PostGamePlaySubmit operation middleware func (sh *strictHandler) PostGamePlaySubmit(ctx echo.Context, gameID int) error { var request PostGamePlaySubmitRequestObject request.GameID = gameID var body PostGamePlaySubmitJSONRequestBody if err := ctx.Bind(&body); err != nil { return err } request.Body = &body handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.PostGamePlaySubmit(ctx.Request().Context(), request.(PostGamePlaySubmitRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "PostGamePlaySubmit") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(PostGamePlaySubmitResponseObject); ok { return validResponse.VisitPostGamePlaySubmitResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetGameWatchLatestStates operation middleware func (sh *strictHandler) GetGameWatchLatestStates(ctx echo.Context, gameID int) error { var request GetGameWatchLatestStatesRequestObject request.GameID = gameID handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetGameWatchLatestStates(ctx.Request().Context(), request.(GetGameWatchLatestStatesRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetGameWatchLatestStates") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetGameWatchLatestStatesResponseObject); ok { return validResponse.VisitGetGameWatchLatestStatesResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetGameWatchRanking operation middleware func (sh *strictHandler) GetGameWatchRanking(ctx echo.Context, gameID int) error { var request GetGameWatchRankingRequestObject request.GameID = gameID handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetGameWatchRanking(ctx.Request().Context(), request.(GetGameWatchRankingRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetGameWatchRanking") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetGameWatchRankingResponseObject); ok { return validResponse.VisitGetGameWatchRankingResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // PostLogin operation middleware func (sh *strictHandler) PostLogin(ctx echo.Context) error { var request PostLoginRequestObject var body PostLoginJSONRequestBody if err := ctx.Bind(&body); err != nil { return err } request.Body = &body handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.PostLogin(ctx.Request().Context(), request.(PostLoginRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "PostLogin") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(PostLoginResponseObject); ok { return validResponse.VisitPostLoginResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // PostLogout operation middleware func (sh *strictHandler) PostLogout(ctx echo.Context) error { var request PostLogoutRequestObject handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.PostLogout(ctx.Request().Context(), request.(PostLogoutRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "PostLogout") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(PostLogoutResponseObject); ok { return validResponse.VisitPostLogoutResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetMe operation middleware func (sh *strictHandler) GetMe(ctx echo.Context) error { var request GetMeRequestObject handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetMe(ctx.Request().Context(), request.(GetMeRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetMe") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetMeResponseObject); ok { return validResponse.VisitGetMeResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // GetTournament operation middleware func (sh *strictHandler) GetTournament(ctx echo.Context, tournamentID int) error { var request GetTournamentRequestObject request.TournamentID = tournamentID handler := func(ctx echo.Context, request interface{}) (interface{}, error) { return sh.ssi.GetTournament(ctx.Request().Context(), request.(GetTournamentRequestObject)) } for _, middleware := range sh.middlewares { handler = middleware(handler, "GetTournament") } response, err := handler(ctx, request) if err != nil { return err } else if validResponse, ok := response.(GetTournamentResponseObject); ok { return validResponse.VisitGetTournamentResponse(ctx.Response()) } else if response != nil { return fmt.Errorf("unexpected response type: %T", response) } return nil } // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ "H4sIAAAAAAAC/+xaTW/bOBP+KwLf96jaThPswbfsIigKpICxSbGHohAoaWKzlUgth4rrGv7vC5L6tChZ", "TtJdOPHNlsjhfDzPzJDUlkQizQQHrpDMtwSjFaTU/LyRUkj9I5MiA6kYmMcpINIl6J9qkwGZE1SS8SXZ", "7Xwi4e+cSYjJ/Es18KtfDhThN4gU2fnk5gdEuWKC3ymqciMXeJ7qaVxwID6ROedaqk8wjyJAJD5ZS8GX", "AeW4Bkl8olgKIlfENzawBAIwKpvJ+mX1n3EFktOkeFBrVKrukw80ha6xMcMsoZuAF2870+JcUm1HgBAJ", "HmNjkF50CVKPWtIUAhYPvLSPt+T/Eh7InPxvWodlWsRkqlW81+N2PmEYZHmYsKghMxQiAcr165QyHmjN", "QRqVmIIUD8n/jFahQhyVkm70/0yKMIH00PRFMWznE1RUKogDqhwm++THu6V4Vz/97aqDndJhTe80jfbb", "kXHEoVZ7zxsuOFaebeDw4vFCT80TxexUJ2xuqQJUer5GsgNBIaAKMBISAszDlKnaLzxPEhomQOZK5uCP", "8pPGeuyGollkhFwbn4J1QwHdJ+l+kIwm5bp+r6XVci7PL2ps7TEPMJIs08s7rU0oX+ZFHhqByttyeI3n", "XkIiTbMEgl5HK6aSEfmvsUw5x2+Z1TCiveiAo24bZpdIzVaZFrBmD8qJ0T8p/8748oYruek6ujSzBzW1", "mIIFI5NIhUaHf/d48IT8UOhSg28Pcb1uvNPjEAtUuT3RsVy/CJD97LEnkkCPs+ZARXgiPQsvGOt6ZO+5", "sT3eb6Tdgtu15ZVWLXtdLr4XudRZmStHNpQ0+g5qwJkHKy5wJQtpo6parY4lgKPApVRFqyeJ/KRnukTy", "PA2kyHs7AlWJGBep9vhO+Wv5tbV67bDazuGo9eQJBOiBa45j08KeUWaibyUP62T93NFpkEUMg3AD7v7I", "5o+LscmsGB4MJDU75P1xEt8PShTI9spf460J70FsmYj3emjNOAcZ6DAcjcJKcqlKQ+HK966gfi7QcmSj", "zSLBg4yqlfstBjROGXdHO6EhJKNq3IAr7Mse/RzAtr6p5nQoW6lc6td1lhbL+IMwC9qmg1wnIVVSIHrl", "psZbQ+hdLz4SnzyCtKWNzCaXk5lWWmTAacbInFxOZpOZDhNVK+PzqaaP5RGYXK0DYrrojzGZkw9g+lqd", "OCRgJjjawe9nM1stuSpyPM2yhEVm5vQbWsRawLspOz7Tml1ZJ706NgvY475WG0nuV+DpmYDKW1H0zNYS", "YognepGr2cVRhg0WZ7PRdKhwbTazHkMv5zRXKyHZz2r9y39z/QchQxbHwCd63M4v8DDdFll1dwgZBkuS", "pqDMLvPLlmgCGnzpGmSY0mgp6pBZ8tWGdLLO1xeH3DigOYB1xtVzcKUXv/r1i2v/I8hHkF5EORfKe2A8", "9lQdFog9CShyGUEf3Kc6O0/LTUAm0IH8hbCb/UVCN3/YFvlXUsCo/ruIN89Af8+uxrWXd0O9rfTOTc0z", "H14pHxJzwBVgebo1VBA0K+yBmD0MO5H6UNk25Ov9g77OVto8PReLN0WO+vwEx3DjrjH8VLjRtnBU0944", "YzvUujfFn7nz9rijxrVad3bsudk6N1uvlRNrqqJVq9s6WFL+0lMa/RaeVMNlftE4NkeGNFm0RhzViXWJ", "5GjNzvXlrXFJ2mvPUSwqrkhPhUAN00Z1ZK0b4EM9WSn8zJfXypdELO1VSX/ndWuGvFRblFHEtZCx8+7m", "uGsVXh48FxKf0UY90ZjnXXeeOqsqBIlcHYSQ/TrvtFtYa3A6ePj1CcgZYi/s8fquGafb1ucPgxdTja9P", "xhTz/e8q/rOSrlpfzYz7+mTgfv5cvV9n9d7t/gkAAP//fXodcbItAAA=", } // GetSwagger returns the content of the embedded swagger specification file // or error if failed to decode func decodeSpec() ([]byte, error) { zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, "")) if err != nil { return nil, fmt.Errorf("error base64 decoding spec: %w", err) } zr, err := gzip.NewReader(bytes.NewReader(zipped)) if err != nil { return nil, fmt.Errorf("error decompressing spec: %w", err) } var buf bytes.Buffer _, err = buf.ReadFrom(zr) if err != nil { return nil, fmt.Errorf("error decompressing spec: %w", err) } return buf.Bytes(), nil } var rawSpec = decodeSpecCached() // a naive cached of a decoded swagger spec func decodeSpecCached() func() ([]byte, error) { data, err := decodeSpec() return func() ([]byte, error) { return data, err } } // Constructs a synthetic filesystem for resolving external references when loading openapi specifications. func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) { res := make(map[string]func() ([]byte, error)) if len(pathToFile) > 0 { res[pathToFile] = rawSpec } return res } // GetSwagger returns the Swagger specification corresponding to the generated code // in this file. The external references of Swagger specification are resolved. // The logic of resolving external references is tightly connected to "import-mapping" feature. // Externally referenced files must be embedded in the corresponding golang packages. // Urls can be supported but this task was out of the scope. func GetSwagger() (swagger *openapi3.T, err error) { resolvePath := PathToRawSpec("") loader := openapi3.NewLoader() loader.IsExternalRefsAllowed = true loader.ReadFromURIFunc = func(loader *openapi3.Loader, url *url.URL) ([]byte, error) { pathToFile := url.String() pathToFile = path.Clean(pathToFile) getSpec, ok := resolvePath[pathToFile] if !ok { err1 := fmt.Errorf("path not found: %s", pathToFile) return nil, err1 } return getSpec() } var specData []byte specData, err = rawSpec() if err != nil { return } swagger, err = loader.LoadFromData(specData) if err != nil { return } return }