package lulu import ( "encoding/json" "fmt" "strconv" ) //go:generate go run github.com/yawnak/string-enumer -t Unit -t CoverValidationStatus --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" ) // CoverValidationStatus is the status of a validation job for a cover // file that is running on the server. type CoverValidationStatus string const ( CoverStatusNull CoverValidationStatus = "NULL" // file validation is not started yet CoverStatusNormalizing CoverValidationStatus = "NORMALIZING" // file validation is still running CoverStatusNormalized CoverValidationStatus = "NORMALIZED" // file validation finished without any errors CoverStatusError CoverValidationStatus = "ERROR" // file is invalid, list of errors is included in the response ) // 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"` } // validateCoverReq is the json body of a /validate-cover/ request. type validateCoverReq struct { SrcUrl string `json:"source_url"` PkgId PkgId `json:"pod_package_id"` NPages uint `json:"interior_page_count"` } 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 } // CoverValidationRecord contains the validation status of a cover file. type CoverValidationRecord struct { Id uint SrcUrl string `json:"source_url"` NPages uint `json:"page_count"` Errors string Status CoverValidationStatus }