code: func (s *Settings) Get(c context.Context, key string, value interface{}) error {
  	bundle, err := s.values.Get(c, func(interface{}) (interface{}, time.Duration, error) {
  		c, done := clock.WithTimeout(c, 15*time.Second) // retry for 15 sec total
  		defer done()
  		var bundle *Bundle
  		var exp time.Duration
  		err := retry.Retry(c, transient.Only(retry.Default), func() (err error) {
  			c, done := clock.WithTimeout(c, 2*time.Second) // trigger a retry after 2 sec RPC timeout
  			defer done()
  			bundle, exp, err = s.storage.FetchAllSettings(c)
  			return
  		}, nil)
  		if err != nil {
  			return nil, 0, err
  		}
  		// Meaning of 0 in FetchAllSettings is different from how lazyslot
  		// understands it.
  		if exp == 0 {
  			exp = lazyslot.ExpiresImmediately
  		}
  		return bundle, exp, nil
  	})
  	if err != nil {
  		return err
  	}
  	return bundle.(*Bundle).get(key, value)
  }
docs: // Get returns setting value (possibly cached) for the given key.
  //
  // It will be deserialized into the supplied value. Caller is responsible
  // to pass correct type and pass same type to all calls. If the setting is not
  // set returns ErrNoSettings.