0
Fork 0
mirror of https://github.com/willnorris/imageproxy.git synced 2024-12-16 21:56:43 -05:00
imageproxy/data/data.go

74 lines
1.5 KiB
Go
Raw Normal View History

// Package data provides common shared data structures for go-imageproxy.
package data
import (
"errors"
"fmt"
"net/url"
"strconv"
"strings"
"time"
)
2013-12-05 02:12:44 -05:00
// Options specifies transformations that can be performed on a
// requested image.
2013-12-05 02:12:44 -05:00
type Options struct {
Width int // requested width, in pixels
Height int // requested height, in pixels
}
2013-12-05 02:12:44 -05:00
func (o Options) String() string {
return fmt.Sprintf("%dx%d", o.Width, o.Height)
}
2013-12-05 02:12:44 -05:00
func ParseOptions(str string) (*Options, error) {
t := new(Options)
var err error
var h, w string
size := strings.SplitN(str, "x", 2)
w = size[0]
if len(size) > 1 {
h = size[1]
} else {
h = w
}
if w != "" {
t.Width, err = strconv.Atoi(w)
if err != nil {
return nil, errors.New("width must be an int")
}
}
if h != "" {
t.Height, err = strconv.Atoi(h)
if err != nil {
return nil, errors.New("height must be an int")
}
}
return t, nil
}
type Request struct {
2013-12-05 02:12:44 -05:00
URL *url.URL // URL of the image to proxy
Options *Options // Image transformation to perform
}
// Image represents a remote image that is being proxied. It tracks where
// the image was originally retrieved from and how long the image can be cached.
type Image struct {
// URL of original remote image.
URL string
// Expires is the cache expiration time for the original image, as
// returned by the remote server.
Expires time.Time
// Etag returned from server when fetching image.
Etag string
// Bytes contains the actual image.
Bytes []byte
}