gifs/api
2014-10-17
Parent:08ec88016e2f
gifs/api/context.go
Make UsageTracker an interface, ditch the channel interface. Stop using channels to track usage. Just call functions. Make UsageTracker an interface, so there can be multiple implementations, and create the in-memory implementation.
| paddy@0 | 1 package api |
| paddy@0 | 2 |
| paddy@0 | 3 import ( |
| paddy@6 | 4 "errors" |
| paddy@6 | 5 "net/http" |
| paddy@6 | 6 |
| paddy@6 | 7 "code.google.com/p/google-api-go-client/storage/v1" |
| paddy@6 | 8 "github.com/golang/oauth2/google" |
| paddy@6 | 9 ) |
| paddy@6 | 10 |
| paddy@6 | 11 var ( |
| paddy@6 | 12 ErrNoBucketSet = errors.New("no bucket set") |
| paddy@6 | 13 ErrNoTmpBucketSet = errors.New("no temporary bucket set") |
| paddy@0 | 14 ) |
| paddy@0 | 15 |
| paddy@0 | 16 type Context struct { |
| paddy@0 | 17 Storage Storage |
| paddy@0 | 18 Datastore Datastore |
| paddy@6 | 19 UsageTracker UsageTracker |
| paddy@6 | 20 TmpBucket string |
| paddy@0 | 21 Bucket string |
| paddy@0 | 22 RootDomain string |
| paddy@0 | 23 } |
| paddy@0 | 24 |
| paddy@6 | 25 func (c Context) Validate() error { |
| paddy@6 | 26 if c.Bucket == "" { |
| paddy@6 | 27 return ErrNoBucketSet |
| paddy@6 | 28 } |
| paddy@6 | 29 if c.TmpBucket == "" { |
| paddy@6 | 30 return ErrNoTmpBucketSet |
| paddy@6 | 31 } |
| paddy@6 | 32 return nil |
| paddy@0 | 33 } |
| paddy@0 | 34 |
| paddy@0 | 35 func NewMemDatastore() Datastore { |
| paddy@0 | 36 return &Memstore{ |
| paddy@0 | 37 collections: map[string]Collection{}, |
| paddy@0 | 38 domains: map[string]Domain{}, |
| paddy@0 | 39 items: map[string]Item{}, |
| paddy@0 | 40 } |
| paddy@0 | 41 } |
| paddy@0 | 42 |
| paddy@6 | 43 func NewGCSServiceStorage() (*GoogleCloudStorage, error) { |
| paddy@6 | 44 config := google.NewComputeEngineConfig("") |
| paddy@6 | 45 client := http.Client{Transport: config.NewTransport()} |
| paddy@6 | 46 gcsService, err := storage.New(&client) |
| paddy@0 | 47 if err != nil { |
| paddy@0 | 48 return nil, err |
| paddy@0 | 49 } |
| paddy@0 | 50 return &GoogleCloudStorage{gcsService}, nil |
| paddy@0 | 51 } |