40 lines
720 B
Go
40 lines
720 B
Go
|
package cache
|
||
|
|
||
|
import (
|
||
|
"github.com/micro/go-micro/v2/store"
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
// Cache implements a cache in front of a micro Store
|
||
|
type Cache struct {
|
||
|
options store.Options
|
||
|
store.Store
|
||
|
|
||
|
stores []store.Store
|
||
|
}
|
||
|
|
||
|
// NewStore returns new cache
|
||
|
func NewStore(opts ...store.Option) store.Store {
|
||
|
s := &Cache{
|
||
|
options: store.Options{},
|
||
|
stores: []store.Store{},
|
||
|
}
|
||
|
for _, o := range opts {
|
||
|
o(&s.options)
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
// Init initialises a new cache
|
||
|
func (c *Cache) Init(opts ...store.Option) error {
|
||
|
for _, o := range opts {
|
||
|
o(&c.options)
|
||
|
}
|
||
|
for _, s := range c.stores {
|
||
|
if err := s.Init(); err != nil {
|
||
|
return errors.Wrapf(err, "Store %s failed to Init()", s.String())
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|