package client import ( "context" "sync" "github.com/pkg/errors" ) type BuildFunc func(context.Context, Client) (*Result, error) type Result struct { mu sync.Mutex Ref Reference Refs map[string]Reference Metadata map[string][]byte } func NewResult() *Result { return &Result{} } func (r *Result) AddMeta(k string, v []byte) { r.mu.Lock() if r.Metadata == nil { r.Metadata = map[string][]byte{} } r.Metadata[k] = v r.mu.Unlock() } func (r *Result) AddRef(k string, ref Reference) { r.mu.Lock() if r.Refs == nil { r.Refs = map[string]Reference{} } r.Refs[k] = ref r.mu.Unlock() } func (r *Result) SetRef(ref Reference) { r.Ref = ref } func (r *Result) SingleRef() (Reference, error) { r.mu.Lock() defer r.mu.Unlock() if r.Refs != nil && r.Ref == nil { return nil, errors.Errorf("invalid map result") } return r.Ref, nil }