mirror of https://github.com/docker/cli.git
44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package store
|
|
|
|
// TypeGetter is a func used to determine the concrete type of a context or
|
|
// endpoint metadata by returning a pointer to an instance of the object
|
|
// eg: for a context of type DockerContext, the corresponding TypeGetter should return new(DockerContext)
|
|
type TypeGetter func() interface{}
|
|
|
|
// NamedTypeGetter is a TypeGetter associated with a name
|
|
type NamedTypeGetter struct {
|
|
name string
|
|
typeGetter TypeGetter
|
|
}
|
|
|
|
// EndpointTypeGetter returns a NamedTypeGetter with the spcecified name and getter
|
|
func EndpointTypeGetter(name string, getter TypeGetter) NamedTypeGetter {
|
|
return NamedTypeGetter{
|
|
name: name,
|
|
typeGetter: getter,
|
|
}
|
|
}
|
|
|
|
// Config is used to configure the metadata marshaler of the context store
|
|
type Config struct {
|
|
contextType TypeGetter
|
|
endpointTypes map[string]TypeGetter
|
|
}
|
|
|
|
// SetEndpoint set an endpoint typing information
|
|
func (c Config) SetEndpoint(name string, getter TypeGetter) {
|
|
c.endpointTypes[name] = getter
|
|
}
|
|
|
|
// NewConfig creates a config object
|
|
func NewConfig(contextType TypeGetter, endpoints ...NamedTypeGetter) Config {
|
|
res := Config{
|
|
contextType: contextType,
|
|
endpointTypes: make(map[string]TypeGetter),
|
|
}
|
|
for _, e := range endpoints {
|
|
res.endpointTypes[e.name] = e.typeGetter
|
|
}
|
|
return res
|
|
}
|