Documentation
¶
Overview ¶
Package media defines the serializable Media container shared by every modality that accepts non-text payloads.
Use NewBytes for owned inline content, NewURI for an absolute external URI, or NewReference for a provider-native identifier. Source is a tagged union: exactly one source must match its Kind. Constructors and JSON decoding enforce that invariant and validate any declared MIME type. Empty MIME retains an unknown type without guessing from the source. Protocols that require a declaration admit media through Media.RequireMIME.
Example ¶
package main
import (
"fmt"
"github.com/Tangerg/scope/core/media"
)
func main() {
attachment, err := media.NewBytes("image/png", []byte("scope"))
if err != nil {
panic(err)
}
attachment.ID = "image-1"
attachment.Name = "scope.png"
fmt.Println(attachment.Source.Kind, len(attachment.Source.Bytes), attachment.Name)
}
Output: bytes 5 scope.png
Index ¶
- Variables
- type Media
- func (m *Media) Bytes() ([]byte, error)
- func (m *Media) Clone() *Media
- func (m *Media) DataURI() (string, error)
- func (Media) JSONSchemaModel() any
- func (m Media) MarshalJSON() ([]byte, error)
- func (m *Media) Reference() (string, error)
- func (m *Media) RequireMIME() error
- func (m *Media) Type() Type
- func (m *Media) URI() (string, error)
- func (m *Media) UnmarshalJSON(data []byte) error
- func (m *Media) Validate() error
- type Source
- type SourceKind
- type TopLevelType
- type Type
Examples ¶
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type Media ¶
type Media struct {
// Empty means the source did not declare a media type. Adapters that require
// one must use RequireMIME instead of inventing a declaration from a filename.
MIME string `json:"mime,omitzero"`
Source Source `json:"source"`
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Metadata metadata.Map `json:"metadata,omitzero"`
}
Inline-byte construction snapshots the caller's buffer.
func NewReference ¶
NewReference retains an opaque handle valid only with the provider that issued it.
func NewURI ¶
NewURI leaves content resolution to the provider or client; the URI must be reachable by it.
func (*Media) DataURI ¶ added in v0.62.0
DataURI encodes inline bytes as an RFC 2397 base64 data URI, the form providers accept for inline media where their wire expects a URL. It carries the Type alone: RFC 2397 parameters admit no whitespace, which a MIME declaration may contain.
func (Media) JSONSchemaModel ¶ added in v0.57.0
func (Media) MarshalJSON ¶
func (*Media) RequireMIME ¶ added in v0.60.0
func (*Media) Type ¶ added in v0.62.0
Type is the declared Type, empty when MIME declares none. An invalid declaration is empty as well; Validate reports it.
func (*Media) UnmarshalJSON ¶
type Source ¶
type Source struct {
Kind SourceKind `json:"kind"`
Bytes []byte `json:"bytes,omitempty"`
URI string `json:"uri,omitempty"`
Ref string `json:"ref,omitempty"`
}
Source is a tagged union. Kind selects exactly one of Bytes, URI, or Ref; all other fields must be empty.
type SourceKind ¶
type SourceKind string
const ( SourceBytes SourceKind = "bytes" SourceURI SourceKind = "uri" SourceReference SourceKind = "reference" )
type TopLevelType ¶ added in v0.62.0
type TopLevelType string
TopLevelType is the registered class before the slash in a Type, such as image; one wire form often accepts a whole class.
const ( TopLevelText TopLevelType = "text" TopLevelImage TopLevelType = "image" TopLevelAudio TopLevelType = "audio" TopLevelVideo TopLevelType = "video" TopLevelApplication TopLevelType = "application" )
func (TopLevelType) Type ¶ added in v0.62.0
func (t TopLevelType) Type(subtype string) Type
Type names subtype within this class, the inverse of Type.Subtype for an adapter whose wire spells only the subtype.
type Type ¶ added in v0.62.0
type Type string
Type is a media type without parameters, lowercased as mime.ParseMediaType returns it, such as image/png. Adapters classify and compare media by it instead of parsing a MIME declaration again.
func ParseType ¶ added in v0.62.0
ParseType reads the Type of a MIME declaration and discards its parameters.
func (Type) TopLevel ¶ added in v0.62.0
func (t Type) TopLevel() TopLevelType