package lulu import ( "encoding/json" "fmt" "strconv" ) //go:generate go run github.com/yawnak/string-enumer -t Unit --text -o ./cover_gen.go . // Unit is a unit of length measurement. type Unit string const ( Points Unit = "pt" Millimeters Unit = "mm" Inches Unit = "inch" ) // coverDimensionsReq is the json body of a /cover-dimensions/ request. type coverDimensionsReq struct { PkgId PkgId `json:"pod_package_id"` NPages uint `json:"interior_page_count"` Unit Unit `json:"unit"` } type CoverDimensions struct { Width, Height float64 Unit Unit } func (cd *CoverDimensions) UnmarshalJSON(data []byte) error { s := string(data) var alias struct { Width, Height string Unit Unit } if err := json.Unmarshal(data, &alias); err != nil { return fmt.Errorf("malformed %T: %q: %w", cd, s, err) } w, err := strconv.ParseFloat(alias.Width, 64) if err != nil { return fmt.Errorf("malformed %T.Width: %q: %w", cd, s, err) } h, err := strconv.ParseFloat(alias.Height, 64) if err != nil { return fmt.Errorf("malformed %T.Height: %q: %w", cd, s, err) } cd.Width = w cd.Height = h cd.Unit = alias.Unit return nil }