github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/pkg/ev/evcache/evcache.go (about) 1 package evcache 2 3 import ( 4 "github.com/eko/gocache/cache" 5 "github.com/eko/gocache/store" 6 ) 7 8 // Interface is Cache interface 9 type Interface interface { 10 Get(key interface{}) (interface{}, error) 11 Set(key, object interface{}) error 12 } 13 14 // NewCache instantiates adapter for cache.CacheInterface 15 func NewCache(cache cache.CacheInterface, option *store.Options) Interface { 16 return &gocacheAdapter{ 17 cache: cache, 18 option: option, 19 } 20 } 21 22 type gocacheAdapter struct { 23 cache cache.CacheInterface 24 option *store.Options 25 } 26 27 func (c *gocacheAdapter) Get(key interface{}) (interface{}, error) { 28 return c.cache.Get(key) 29 } 30 31 func (c *gocacheAdapter) Set(key, object interface{}) error { 32 return c.cache.Set(key, object, c.option) 33 } 34 35 // Marshaler is interface for marshaler.Marshaler 36 type Marshaler interface { 37 Get(key interface{}, returnObj interface{}) (interface{}, error) 38 Set(key, object interface{}, options *store.Options) error 39 Delete(key interface{}) error 40 Invalidate(options store.InvalidateOptions) error 41 Clear() error 42 } 43 44 // MarshallerReturnObj generates returned object to fill by marshaler.Marshaler 45 type MarshallerReturnObj func() interface{} 46 47 // NewCacheMarshaller generates adapter for marshaler.Marshaler 48 func NewCacheMarshaller(marshaller Marshaler, returnObj MarshallerReturnObj, option *store.Options) Interface { 49 return &gocacheMarshallerAdapter{ 50 marshaller: marshaller, 51 returnObj: returnObj, 52 option: option, 53 } 54 } 55 56 type gocacheMarshallerAdapter struct { 57 marshaller Marshaler 58 returnObj MarshallerReturnObj 59 option *store.Options 60 } 61 62 func (c *gocacheMarshallerAdapter) Get(key interface{}) (interface{}, error) { 63 return c.marshaller.Get(key, c.returnObj()) 64 } 65 66 func (c *gocacheMarshallerAdapter) Set(key, object interface{}) error { 67 return c.marshaller.Set(key, object, c.option) 68 }