nurse/protocols/http/status_validation.go

41 lines
786 B
Go
Raw Normal View History

2022-06-09 20:12:45 +00:00
package http
import (
"fmt"
"log/slog"
2022-06-09 20:12:45 +00:00
"net/http"
2022-09-22 09:46:36 +00:00
"code.icb4dc0.de/prskr/nurse/grammar"
"code.icb4dc0.de/prskr/nurse/validation"
2022-06-09 20:12:45 +00:00
)
var _ validation.FromCall[*http.Response] = (*StatusValidator)(nil)
type StatusValidator struct {
Want int
}
func (s *StatusValidator) Validate(resp *http.Response) error {
slog.Debug("Validate HTTP status code",
slog.Int("expected_code", s.Want),
slog.Int("actual_code", resp.StatusCode),
)
2022-06-09 20:12:45 +00:00
if resp.StatusCode != s.Want {
return fmt.Errorf("want HTTP status %d but got %d", s.Want, resp.StatusCode)
}
return nil
}
func (s *StatusValidator) UnmarshalCall(c grammar.Call) error {
if err := grammar.ValidateParameterCount(c.Params, 1); err != nil {
return err
}
var err error
s.Want, err = c.Params[0].AsInt()
return err
}