Page MenuHomeMusing Studio

No OneTemporary

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)
+ }
+ })
+ }
+}

File Metadata

Mime Type
text/x-diff
Expires
Fri, May 16, 6:57 PM (7 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3240375

Event Timeline