40 lines
750 B
Go
40 lines
750 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
// Filter is a filter interface
|
|
type Filter interface {
|
|
Bounds(srcBounds string) (dstBounds string)
|
|
}
|
|
|
|
// GIFT type
|
|
type GIFT struct {
|
|
Filters []Filter
|
|
}
|
|
|
|
// New creates a new filter list and initializes it with the given slice of filters.
|
|
func New(filters ...Filter) *GIFT {
|
|
return &GIFT{
|
|
Filters: filters,
|
|
}
|
|
}
|
|
|
|
// Bounds calculates the appropriate bounds for the result image after applying all the added filters.
|
|
func (g *GIFT) Bounds(srcBounds string) (dstBounds string) {
|
|
dstBounds = srcBounds
|
|
for _, f := range g.Filters {
|
|
dstBounds = f.Bounds(dstBounds)
|
|
}
|
|
return dstBounds
|
|
}
|
|
|
|
func main() {
|
|
var filters []Filter
|
|
bounds := "foo"
|
|
g := New(filters...)
|
|
fmt.Println(g.Bounds(bounds))
|
|
}
|
|
|
|
// Output:
|
|
// foo
|