diff --git a/activitystreams/attachment.go b/activitystreams/attachment.go index b2b47e9..c2bfc2e 100644 --- a/activitystreams/attachment.go +++ b/activitystreams/attachment.go @@ -1,12 +1,33 @@ package activitystreams +import ( + "mime" + "strings" +) + type Attachment struct { Type AttachmentType `json:"type"` URL string `json:"url"` MediaType string `json:"mediaType"` Name string `json:"name"` } type AttachmentType string const AttachImage AttachmentType = "Image" + +// NewImageAttachment creates a new Attachment from the given URL, setting the +// correct type and automatically detecting the MediaType based on the file +// extension. +func NewImageAttachment(url string) *Attachment { + var imgType string + extIdx := strings.LastIndexByte(url, '.') + if extIdx > -1 { + imgType = mime.TypeByExtension(url[extIdx:]) + } + return &Attachment{ + Type: AttachImage, + URL: url, + MediaType: imgType, + } +} diff --git a/activitystreams/attachment_test.go b/activitystreams/attachment_test.go new file mode 100644 index 0000000..c96d1cd --- /dev/null +++ b/activitystreams/attachment_test.go @@ -0,0 +1,40 @@ +package activitystreams + +import ( + "reflect" + "testing" +) + +func TestNewImageAttachment(t *testing.T) { + type args struct { + url string + } + tests := []struct { + name string + args args + want *Attachment + }{ + {name: "good svg", args: args{"https://writefreely.org/img/writefreely.svg"}, want: &Attachment{ + Type: "Image", + URL: "https://writefreely.org/img/writefreely.svg", + MediaType: "image/svg+xml", + }}, + {name: "good png", args: args{"https://i.snap.as/12345678.png"}, want: &Attachment{ + Type: "Image", + URL: "https://i.snap.as/12345678.png", + MediaType: "image/png", + }}, + {name: "no extension", args: args{"https://i.snap.as/12345678"}, want: &Attachment{ + Type: "Image", + URL: "https://i.snap.as/12345678", + MediaType: "", + }}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := NewImageAttachment(tt.args.url); !reflect.DeepEqual(got, tt.want) { + t.Errorf("NewImageAttachment() = %v, want %v", got, tt.want) + } + }) + } +}