Skip to content
Snippets Groups Projects
Commit daeeba6a authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Merge branch 'feature/PRXS-2416-FormatFromMIME' into 'master'

Добавлена функция для получения формата из MIME типа

See merge request perxis/perxis-go!225
parents a1afa563 afa5d0dc
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,7 @@ package convert
import (
"image"
"io"
"mime"
"os"
"strings"
......@@ -69,5 +70,23 @@ func FormatFromExtension(ext string) (Format, error) {
if f, ok := formatExtensions[ext]; ok {
return f, nil
}
return "", errors.Errorf("unsupported format")
return "", errors.Errorf("unsupported format: %s", ext)
}
func FormatFromMIMEType(typ string) (Format, error) {
extensions, err := mime.ExtensionsByType(typ)
if err != nil {
return "", errors.Wrap(err, "get extensions by mime type")
}
if len(extensions) == 0 {
return "", errors.Errorf("unknown mime type: %s", typ)
}
for _, extension := range extensions {
var format Format
format, err = FormatFromExtension(extension)
if err == nil {
return format, nil
}
}
return "", err
}
......@@ -57,6 +57,55 @@ func TestFormatFromExtension(t *testing.T) {
}
}
func TestFormatFromMIMEType(t *testing.T) {
var tests = []struct {
name string
input string
output Format
wantErr bool
}{
{
name: "correct jpeg",
input: "image/jpeg",
output: JPEG,
wantErr: false,
},
{
name: "correct png",
input: "image/png",
output: PNG,
wantErr: false,
},
{
name: "unsupported mime type",
input: "application/json",
wantErr: true,
},
{
name: "unknown mime type",
input: "application/perxis",
wantErr: true,
},
{
name: "no mime type",
input: "",
wantErr: true,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
format, err := FormatFromMIMEType(tc.input)
if tc.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tc.output, format)
}
})
}
}
func TestEncode(t *testing.T) {
var tests = []struct {
name string
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment