diff --git a/block.go b/block.go index 7ed9d81..1da7337 100644 --- a/block.go +++ b/block.go @@ -46,6 +46,7 @@ type blockDTO struct { Code *CodeBlock `json:"code,omitempty"` Embed *EmbedBlock `json:"embed,omitempty"` Image *ImageBlock `json:"image,omitempty"` + Audio *AudioBlock `json:"audio,omitempty"` Video *VideoBlock `json:"video,omitempty"` File *FileBlock `json:"file,omitempty"` PDF *PDFBlock `json:"pdf,omitempty"` @@ -460,6 +461,29 @@ func (b ImageBlock) MarshalJSON() ([]byte, error) { }) } +type AudioBlock struct { + baseBlock + + Type FileType `json:"type"` + File *FileFile `json:"file,omitempty"` + External *FileExternal `json:"external,omitempty"` + Caption []RichText `json:"caption,omitempty"` +} + +// MarshalJSON implements json.Marshaler. +func (b AudioBlock) MarshalJSON() ([]byte, error) { + type ( + blockAlias ImageBlock + dto struct { + Audio blockAlias `json:"audio"` + } + ) + + return json.Marshal(dto{ + Audio: blockAlias(b), + }) +} + type VideoBlock struct { baseBlock @@ -806,6 +830,7 @@ const ( BlockTypeCode BlockType = "code" BlockTypeEmbed BlockType = "embed" BlockTypeImage BlockType = "image" + BlockTypeAudio BlockType = "audio" BlockTypeVideo BlockType = "video" BlockTypeFile BlockType = "file" BlockTypePDF BlockType = "pdf" @@ -937,6 +962,9 @@ func (dto blockDTO) Block() Block { case BlockTypeImage: dto.Image.baseBlock = baseBlock return dto.Image + case BlockTypeAudio: + dto.Audio.baseBlock = baseBlock + return dto.Audio case BlockTypeVideo: dto.Video.baseBlock = baseBlock return dto.Video diff --git a/examples/create-page/main.go b/examples/create-page/main.go index 4db1703..7ffa4a6 100644 --- a/examples/create-page/main.go +++ b/examples/create-page/main.go @@ -189,6 +189,12 @@ func main() { URL: "https://picsum.photos/600/200.jpg", }, }, + notion.AudioBlock{ + Type: notion.FileTypeExternal, + External: ¬ion.FileExternal{ + URL: "https://download.samplelib.com/mp3/sample-3s.mp3", + }, + }, notion.VideoBlock{ Type: notion.FileTypeExternal, External: ¬ion.FileExternal{