From cea3b3db0d7fb1bf3da11f4107e41c0fdd881d4d Mon Sep 17 00:00:00 2001 From: Samuel Hawksby-Robinson Date: Mon, 5 Sep 2022 15:02:10 +0100 Subject: [PATCH] Added FileSizeError instead of clunky awful string comparison --- images/encode.go | 18 ++++++++++++------ images/encode_test.go | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/images/encode.go b/images/encode.go index 8d1832365..65b22ba52 100644 --- a/images/encode.go +++ b/images/encode.go @@ -29,6 +29,15 @@ func renderJpeg(w io.Writer, m image.Image, config EncodeConfig) error { return jpeg.Encode(w, m, o) } +type FileSizeError struct { + expected int + received int +} + +func (e *FileSizeError) Error() string { + return fmt.Sprintf("image size after processing exceeds max, expected < '%d', received < '%d'", e.expected, e.received) +} + func EncodeToLimits(bb *bytes.Buffer, img image.Image, bounds FileSizeLimits) error { q := MaxJpegQuality for q > MinJpegQuality-1 { @@ -46,11 +55,7 @@ func EncodeToLimits(bb *bytes.Buffer, img image.Image, bounds FileSizeLimits) er if bounds.Max > bb.Len() { return nil } - return fmt.Errorf( - "image size after processing exceeds max, expect < '%d', received < '%d'", - bounds.Max, - bb.Len(), - ) + return &FileSizeError{expected: bounds.Max, received: bb.Len()} } bb.Reset() @@ -86,7 +91,8 @@ func CompressToFileLimits(bb *bytes.Buffer, img image.Image, bounds FileSizeLimi if err == nil { return nil } - if err.Error()[:50] != "image size after processing exceeds max, expect < " { + // If error is not a FileSizeError then we need to return it up + if fse := (*FileSizeError)(nil); !errors.As(err, &fse) { return err } diff --git a/images/encode_test.go b/images/encode_test.go index 259f3ea01..9d522a581 100644 --- a/images/encode_test.go +++ b/images/encode_test.go @@ -60,7 +60,7 @@ func TestEncodeToBestSize(t *testing.T) { { "rose.webp", 8513, - errors.New("image size after processing exceeds max, expect < '5632', received < '8513'"), + errors.New("image size after processing exceeds max, expected < '5632', received < '8513'"), }, { "spin.gif",