1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package router // import "gopkg.in/juju/charmstore.v5-unstable/internal/router"
14
var _ BulkIncludeHandler = SingleIncludeHandler(nil)
16
// SingleIncludeHandler implements BulkMetaHander for a non-batching
17
// metadata retrieval function that can perform a GET only.
18
type SingleIncludeHandler func(id *ResolvedURL, path string, flags url.Values, req *http.Request) (interface{}, error)
20
// Key implements BulkMetadataHander.Key.
21
func (h SingleIncludeHandler) Key() interface{} {
22
// Use a local type so that we are guaranteed that nothing
23
// other than SingleIncludeHandler can generate that key.
24
type singleMetaHandlerKey struct{}
25
return singleMetaHandlerKey(singleMetaHandlerKey{})
28
// HandleGet implements BulkMetadataHander.HandleGet.
29
func (h SingleIncludeHandler) HandleGet(hs []BulkIncludeHandler, id *ResolvedURL, paths []string, flags url.Values, req *http.Request) ([]interface{}, error) {
30
results := make([]interface{}, len(hs))
31
for i, h := range hs {
32
h := h.(SingleIncludeHandler)
33
result, err := h(id, paths[i], flags, req)
35
// TODO(rog) include index of failed handler.
36
return nil, errgo.Mask(err, errgo.Any)
43
var errPutNotImplemented = errgo.New("PUT not implemented")
45
// HandlePut implements BulkMetadataHander.HandlePut.
46
func (h SingleIncludeHandler) HandlePut(hs []BulkIncludeHandler, id *ResolvedURL, paths []string, values []*json.RawMessage, req *http.Request) []error {
47
errs := make([]error, len(hs))
49
errs[i] = errPutNotImplemented