35 lines
897 B
Go
35 lines
897 B
Go
|
package ui
|
||
|
|
||
|
import "io"
|
||
|
|
||
|
var _ Resources = &fallbackResources{}
|
||
|
|
||
|
type fallbackResources struct {
|
||
|
resources Resources
|
||
|
fallback Resources
|
||
|
}
|
||
|
|
||
|
// NewFallbackResources creates a Resources that first will try to access resources and on failure will try to access the fallback resources. Will take ownership of both resources (Destroy).
|
||
|
func NewFallbackResources(resources, fallback Resources) Resources {
|
||
|
return &fallbackResources{resources, fallback}
|
||
|
}
|
||
|
|
||
|
func (r *fallbackResources) OpenResource(name string) (io.ReadCloser, error) {
|
||
|
if reader, err := r.resources.OpenResource(name); err == nil {
|
||
|
return reader, nil
|
||
|
}
|
||
|
return r.fallback.OpenResource(name)
|
||
|
}
|
||
|
|
||
|
func (r *fallbackResources) Destroy() error {
|
||
|
errResources := r.resources.Destroy()
|
||
|
errFallback := r.fallback.Destroy()
|
||
|
if errResources != nil {
|
||
|
return errResources
|
||
|
}
|
||
|
if errFallback != nil {
|
||
|
return errFallback
|
||
|
}
|
||
|
return nil
|
||
|
}
|