47 lines
803 B
Go
47 lines
803 B
Go
package bucket
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
type Photo string
|
|
|
|
const photoPrefix = "photo/"
|
|
|
|
var ErrorInvalidPhoto = errors.New("invalid photo")
|
|
|
|
func (p Photo) Validate() error {
|
|
if !strings.HasPrefix(string(p), photoPrefix) {
|
|
return fmt.Errorf("%w: %v", ErrorInvalidPhoto, p)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p Photo) String() string {
|
|
return string(p)
|
|
}
|
|
|
|
func (p Photo) Path() string {
|
|
u := url.URL{
|
|
Path: string(p),
|
|
}
|
|
return u.String()
|
|
}
|
|
|
|
const photoMetadataPrefix = "photometa/"
|
|
|
|
func (p Photo) MetadataString() string {
|
|
objectBase := strings.Replace(string(p), photoPrefix, photoMetadataPrefix, 1)
|
|
objectBase += ".metadata.json"
|
|
return objectBase
|
|
}
|
|
|
|
type PhotoMetadata struct {
|
|
Title string `json:"title"`
|
|
Width int `json:"width"`
|
|
Height int `json:"height"`
|
|
}
|