package resource type Provider interface { NewInstance(string) (Instance, error) } // TranslatedProvider manipulates resource locations, so as to allow // sandboxing, or relative paths for example. type TranslatedProvider struct { // The underlying Provider. BaseProvider Provider // Some location used in calculating final locations. BaseLocation string // Function that takes BaseLocation, and the caller location and returns // the location to be used with the BaseProvider. JoinLocations func(base, rel string) string } func (me TranslatedProvider) NewInstance(rel string) (Instance, error) { return me.BaseProvider.NewInstance(me.JoinLocations(me.BaseLocation, rel)) }