package main import ( "bytes" "encoding/json" "fmt" "net/http" "codeberg.org/vlbeaudoin/voki/v3" ) var _ voki.Requester[HealthGETResponse] = HealthGETRequest{} type HealthGETRequest struct{} func (request HealthGETRequest) Complete() bool { return true } func (request HealthGETRequest) Request(v *voki.Voki) (response HealthGETResponse, err error) { if !request.Complete() { err = fmt.Errorf("Incomplete HealthGET request") return } statusCode, body, err := v.CallAndParse( http.MethodGet, "/api/v7/health/", nil, true, ) if err != nil { err = fmt.Errorf("%d: %s", statusCode, err) return } response.SetStatusCode(statusCode) if err = json.Unmarshal(body, &response); err != nil { return } return } var _ voki.Requester[ProgrammesPOSTResponse] = ProgrammesPOSTRequest{} type ProgrammesPOSTRequest struct { Data struct { Programmes []Programme } } func (request ProgrammesPOSTRequest) Complete() bool { return len(request.Data.Programmes) != 0 } func (request ProgrammesPOSTRequest) Request(v *voki.Voki) (response ProgrammesPOSTResponse, err error) { if !request.Complete() { err = fmt.Errorf("Incomplete ProgrammesPOSTRequest") return } var buf bytes.Buffer if err = json.NewEncoder(&buf).Encode(request.Data); err != nil { return } statusCode, body, err := v.CallAndParse( http.MethodPost, "/api/v7/programme/", &buf, true, ) if err != nil { err = fmt.Errorf("code=%d err=%s", statusCode, err) return } response.SetStatusCode(statusCode) if err = json.Unmarshal(body, &response); err != nil { return } return } var _ voki.Requester[MembresPOSTResponse] = MembresPOSTRequest{} type MembresPOSTRequest struct { Data struct { Membres []Membre } } func (request MembresPOSTRequest) Complete() bool { return len(request.Data.Membres) != 0 } func (request MembresPOSTRequest) Request(v *voki.Voki) (response MembresPOSTResponse, err error) { if !request.Complete() { err = fmt.Errorf("Incomplete MembresPOSTRequest") return } var buf bytes.Buffer if err = json.NewEncoder(&buf).Encode(request.Data); err != nil { return } statusCode, body, err := v.CallAndParse( http.MethodPost, "/api/v7/membre/", &buf, true, ) if err != nil { err = fmt.Errorf("code=%d err=%s", statusCode, err) return } response.SetStatusCode(statusCode) if err = json.Unmarshal(body, &response); err != nil { return } return } var _ voki.Requester[MembreGETResponse] = MembreGETRequest{} type MembreGETRequest struct { Param struct { MembreID string `json:"membre_id" param:"membre_id"` } } func (request MembreGETRequest) Complete() bool { return request.Param.MembreID != "" } func (request MembreGETRequest) Request(v *voki.Voki) (response MembreGETResponse, err error) { if !request.Complete() { err = fmt.Errorf("Incomplete MembreGETRequest") return } if id := request.Param.MembreID; !IsMembreID(id) { err = fmt.Errorf("MembreID '%s' invalide", id) return } statusCode, body, err := v.CallAndParse( http.MethodGet, fmt.Sprintf("/api/v7/membre/%s/", request.Param.MembreID), nil, true, ) if err != nil { err = fmt.Errorf("code=%d err=%s", statusCode, err) return } response.SetStatusCode(statusCode) if err = json.Unmarshal(body, &response); err != nil { return } return }