Documentation ¶
Overview ¶
Package memstore contains a store which is just a collection of key-value entries with immutability capabilities.
Developers can use that storage to their own apps if they like its behavior. It's fast and in the same time you get read-only access (safety) when you need it.
Index ¶
- Variables
- func GobEncode(store Store, w io.Writer) error
- func GobEncodeEntry(entry Entry, w io.Writer) error
- func GobSerialize(store Store) ([]byte, error)
- func GobSerializeEntry(entry Entry) ([]byte, error)
- type Entry
- func (e Entry) BoolDefault(def bool) (bool, error)
- func (e Entry) Float32Default(key string, def float32) (float32, error)
- func (e Entry) Float64Default(def float64) (float64, error)
- func (e Entry) GetByKindOrNil(k reflect.Kind) interface{}
- func (e Entry) Int16Default(def int16) (int16, error)
- func (e Entry) Int32Default(def int32) (int32, error)
- func (e Entry) Int64Default(def int64) (int64, error)
- func (e Entry) Int8Default(def int8) (int8, error)
- func (e Entry) IntDefault(def int) (int, error)
- func (e Entry) String() string
- func (e Entry) StringDefault(def string) string
- func (e Entry) StringTrim() string
- func (e Entry) TimeDefault(def time.Time) (time.Time, error)
- func (e Entry) Uint16Default(def uint16) (uint16, error)
- func (e Entry) Uint32Default(def uint32) (uint32, error)
- func (e Entry) Uint64Default(def uint64) (uint64, error)
- func (e Entry) Uint8Default(def uint8) (uint8, error)
- func (e Entry) UintDefault(def uint) (uint, error)
- func (e Entry) Value() interface{}
- func (e Entry) WeekdayDefault(def time.Weekday) (time.Weekday, error)
- type ErrEntryNotFound
- type LifeTime
- type Store
- func (r *Store) Exists(key string) bool
- func (r *Store) Get(key string) interface{}
- func (r *Store) GetBool(key string) (bool, error)
- func (r *Store) GetBoolDefault(key string, def bool) bool
- func (r *Store) GetDefault(key string, def interface{}) interface{}
- func (r *Store) GetEntry(key string) (Entry, bool)
- func (r *Store) GetEntryAt(index int) (Entry, bool)
- func (r *Store) GetFloat64(key string) (float64, error)
- func (r *Store) GetFloat64Default(key string, def float64) float64
- func (r *Store) GetInt(key string) (int, error)
- func (r *Store) GetInt16(key string) (int16, error)
- func (r *Store) GetInt16Default(key string, def int16) int16
- func (r *Store) GetInt32(key string) (int32, error)
- func (r *Store) GetInt32Default(key string, def int32) int32
- func (r *Store) GetInt64(key string) (int64, error)
- func (r *Store) GetInt64Default(key string, def int64) int64
- func (r *Store) GetInt8(key string) (int8, error)
- func (r *Store) GetInt8Default(key string, def int8) int8
- func (r *Store) GetIntDefault(key string, def int) int
- func (r *Store) GetOrSet(key string, setFunc func() interface{}) interface{}
- func (r *Store) GetString(key string) string
- func (r *Store) GetStringDefault(key string, def string) string
- func (r *Store) GetStringTrim(name string) string
- func (r *Store) GetTime(key string) (time.Time, error)
- func (r *Store) GetUint(key string) (uint, error)
- func (r *Store) GetUint16(key string) (uint16, error)
- func (r *Store) GetUint16Default(key string, def uint16) uint16
- func (r *Store) GetUint32(key string) (uint32, error)
- func (r *Store) GetUint32Default(key string, def uint32) uint32
- func (r *Store) GetUint64(key string) (uint64, error)
- func (r *Store) GetUint64Default(key string, def uint64) uint64
- func (r *Store) GetUint8(key string) (uint8, error)
- func (r *Store) GetUint8Default(key string, def uint8) uint8
- func (r *Store) GetUintDefault(key string, def uint) uint
- func (r *Store) GetWeekday(key string) (time.Weekday, error)
- func (r *Store) Len() int
- func (r *Store) Remove(key string) bool
- func (r *Store) Reset()
- func (r *Store) Save(key string, value interface{}, immutable bool) (Entry, bool)
- func (r Store) Serialize() []byte
- func (r *Store) Set(key string, value interface{}) (Entry, bool)
- func (r *Store) SetImmutable(key string, value interface{}) (Entry, bool)
- func (r *Store) SimpleDate(key string) string
- func (r *Store) Visit(visitor func(key string, value interface{}))
- type StringEntry
- type ValueSetter
Constants ¶
This section is empty.
Variables ¶
var ( // Clock is the default clock to get the current time, // it can be used for testing purposes too. // // Defaults to time.Now. Clock func() time.Time = time.Now // ExpireDelete may be set on Cookie.Expire for expiring the given cookie. ExpireDelete = time.Unix(0, 0) // time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) )
Functions ¶
func GobEncodeEntry ¶
GobEncodeEntry accepts an entry and writes as series of bytes to the "w" writer.
func GobSerialize ¶
GobSerialize same as GobEncode but it returns the bytes using a temp buffer.
func GobSerializeEntry ¶
GobSerializeEntry same as GobEncodeEntry but it returns the bytes using a temp buffer.
Types ¶
type Entry ¶
type Entry struct { Key string `json:"key" msgpack:"key" yaml:"Key" toml:"Value"` ValueRaw interface{} `json:"value" msgpack:"value" yaml:"Value" toml:"Value"` // contains filtered or unexported fields }
Entry is the entry of the context storage Store - .Values()
func GobDecodeEntry ¶
GobDecodeEntry accepts a series of bytes and returns the entry.
func (Entry) BoolDefault ¶
BoolDefault returns the user's value as bool. a string which is "1" or "t" or "T" or "TRUE" or "true" or "True" or "0" or "f" or "F" or "FALSE" or "false" or "False". Any other value returns an error.
If not found returns "def" and a non-nil error.
func (Entry) Float32Default ¶
Float32Default returns the entry's value as float32. If not found returns "def" and a non-nil error.
func (Entry) Float64Default ¶
Float64Default returns the entry's value as float64. If not found returns "def" and a non-nil error.
func (Entry) GetByKindOrNil ¶
GetByKindOrNil will try to get this entry's value of "k" kind, if value is not that kind it will NOT try to convert it the "k", instead it will return nil, except if boolean; then it will return false even if the value was not bool.
If the "k" kind is not a string or int or int64 or bool then it will return the raw value of the entry as it's.
func (Entry) Int16Default ¶
Int16Default returns the entry's value as int16. If not found returns "def" and a non-nil error.
func (Entry) Int32Default ¶
Int32Default returns the entry's value as int32. If not found returns "def" and a non-nil error.
func (Entry) Int64Default ¶
Int64Default returns the entry's value as int64. If not found returns "def" and a non-nil error.
func (Entry) Int8Default ¶
Int8Default returns the entry's value as int8. If not found returns "def" and a non-nil error.
func (Entry) IntDefault ¶
IntDefault returns the entry's value as int. If not found returns "def" and a non-nil error.
func (Entry) StringDefault ¶
StringDefault returns the entry's value as string. If not found returns "def".
func (Entry) StringTrim ¶
StringTrim returns the entry's string value without trailing spaces.
func (Entry) TimeDefault ¶ added in v12.2.0
TimeDefault returns the stored time.Time value based on its "key". If does not exist or the stored key's value is not a time it returns the "def" time value and a not found error.
func (Entry) Uint16Default ¶
Uint16Default returns the entry's value as uint16. If not found returns "def" and a non-nil error.
func (Entry) Uint32Default ¶
Uint32Default returns the entry's value as uint32. If not found returns "def" and a non-nil error.
func (Entry) Uint64Default ¶
Uint64Default returns the entry's value as uint64. If not found returns "def" and a non-nil error.
func (Entry) Uint8Default ¶
Uint8Default returns the entry's value as uint8. If not found returns "def" and a non-nil error.
func (Entry) UintDefault ¶
UintDefault returns the entry's value as uint. If not found returns "def" and a non-nil error.
func (Entry) Value ¶
func (e Entry) Value() interface{}
Value returns the value of the entry, respects the immutable.
func (Entry) WeekdayDefault ¶ added in v12.2.0
WeekdayDefault returns the stored time.Weekday value based on its "key". If does not exist or the stored key's value is not a weekday it returns the "def" weekday value and a not found error.
type ErrEntryNotFound ¶
type ErrEntryNotFound struct { Key string // the entry's key. Kind reflect.Kind // i.e bool, int, string... Type reflect.Type // i.e time.Time{} or custom struct. }
ErrEntryNotFound may be returned from memstore methods if a key (with a certain kind) was not found. Usage:
var e *ErrEntryNotFound errors.As(err, &e) To check for specific key error: errors.As(err, &ErrEntryNotFound{Key: "key"}) To check for specific key-kind error: errors.As(err, &ErrEntryNotFound{Key: "key", Kind: reflect.Int})
func (*ErrEntryNotFound) As ¶
func (e *ErrEntryNotFound) As(target interface{}) bool
As can be used to manually check if the error came from the memstore is a not found entry, the key must much in order to return true. Usage: errors.As(err, &ErrEntryNotFound{Key: "key", Kind: reflect.Int})
Do NOT use this method directly, prefer` errors.As` method as explained above.
Implements: go/src/errors/wrap.go#84
func (*ErrEntryNotFound) Error ¶
func (e *ErrEntryNotFound) Error() string
type LifeTime ¶ added in v12.2.8
type LifeTime struct { // Remember, tip for the future: // No need of gob.Register, because we embed the time.Time. // And serious bug which has a result of me spending my whole evening: // Because of gob encoding it doesn't encodes/decodes the other fields if time.Time is embedded // (this should be a bug(go1.9-rc1) or not. We don't care atm) time.Time // StartTime holds the Now of the Begin. Begun time.Time // contains filtered or unexported fields }
LifeTime controls the session expiration datetime.
func NewLifeTime ¶ added in v12.2.8
func NewLifeTime() *LifeTime
NewLifeTime returns a pointer to an empty LifeTime instance.
func (*LifeTime) Begin ¶ added in v12.2.8
Begin will begin the life based on the Clock (time.Now()).Add(d). Use `Continue` to continue from a stored time(database-based session does that).
func (*LifeTime) DurationUntilExpiration ¶ added in v12.2.8
DurationUntilExpiration returns the duration until expires, it can return negative number if expired, a call to `HasExpired` may be useful before calling this `Dur` function.
func (*LifeTime) ExpireNow ¶ added in v12.2.8
func (lt *LifeTime) ExpireNow()
ExpireNow reduce the lifetime completely.
func (*LifeTime) HasExpired ¶ added in v12.2.8
HasExpired reports whether "lt" represents is expired.
type Store ¶
type Store []Entry
Store is a collection of key-value entries with immutability capabilities.
func (*Store) Exists ¶ added in v12.2.0
Exists is a small helper which reports whether a key exists. It's not recommended to be used outside of templates. Use Get or GetEntry instead which will give you back the entry value too, so you don't have to loop again the key-value storage to get its value.
func (*Store) GetBool ¶
GetBool returns the user's value as bool, based on its key. a string which is "1" or "t" or "T" or "TRUE" or "true" or "True" or "0" or "f" or "F" or "FALSE" or "false" or "False". Any other value returns an error.
If not found returns false and a non-nil error.
func (*Store) GetBoolDefault ¶
GetBoolDefault returns the user's value as bool, based on its key. a string which is "1" or "t" or "T" or "TRUE" or "true" or "True" or "0" or "f" or "F" or "FALSE" or "false" or "False".
If not found returns "def".
func (*Store) GetDefault ¶
GetDefault returns the entry's value based on its key. If not found returns "def". This function checks for immutability as well, the rest don't.
func (*Store) GetEntry ¶
GetEntry returns a pointer to the "Entry" found with the given "key" if nothing found then it returns an empty Entry and false.
func (*Store) GetEntryAt ¶
GetEntryAt returns the internal Entry of the memstore based on its index, the stored index by the router. If not found then it returns a zero Entry and false.
func (*Store) GetFloat64 ¶
GetFloat64 returns the entry's value as float64, based on its key. If not found returns -1 and a non nil error.
func (*Store) GetFloat64Default ¶
GetFloat64Default returns the entry's value as float64, based on its key. If not found returns "def".
func (*Store) GetInt ¶
GetInt returns the entry's value as int, based on its key. If not found returns -1 and a non-nil error.
func (*Store) GetInt16 ¶
GetInt16 returns the entry's value as int16, based on its key. If not found returns -1 and a non-nil error.
func (*Store) GetInt16Default ¶
GetInt16Default returns the entry's value as int16, based on its key. If not found returns "def".
func (*Store) GetInt32 ¶
GetInt32 returns the entry's value as int32, based on its key. If not found returns -1 and a non-nil error.
func (*Store) GetInt32Default ¶
GetInt32Default returns the entry's value as int32, based on its key. If not found returns "def".
func (*Store) GetInt64 ¶
GetInt64 returns the entry's value as int64, based on its key. If not found returns -1 and a non-nil error.
func (*Store) GetInt64Default ¶
GetInt64Default returns the entry's value as int64, based on its key. If not found returns "def".
func (*Store) GetInt8 ¶
GetInt8 returns the entry's value as int8, based on its key. If not found returns -1 and a non-nil error.
func (*Store) GetInt8Default ¶
GetInt8Default returns the entry's value as int8, based on its key. If not found returns "def".
func (*Store) GetIntDefault ¶
GetIntDefault returns the entry's value as int, based on its key. If not found returns "def".
func (*Store) GetOrSet ¶ added in v12.2.0
GetOrSet is like `GetDefault` but it accepts a function which is fired and its result is used to `Set` if the "key" was not found or its value is nil.
func (*Store) GetStringDefault ¶
GetStringDefault returns the entry's value as string, based on its key. If not found returns "def".
func (*Store) GetStringTrim ¶
GetStringTrim returns the entry's string value without trailing spaces.
func (*Store) GetTime ¶ added in v12.2.0
GetTime returns the stored time.Time value based on its "key". If does not exist or the stored key's value is not a time it returns a zero time value and a not found error.
func (*Store) GetUint ¶
GetUint returns the entry's value as uint, based on its key. If not found returns 0 and a non-nil error.
func (*Store) GetUint16 ¶
GetUint16 returns the entry's value as uint16, based on its key. If not found returns 0 and a non-nil error.
func (*Store) GetUint16Default ¶
GetUint16Default returns the entry's value as uint16, based on its key. If not found returns "def".
func (*Store) GetUint32 ¶
GetUint32 returns the entry's value as uint32, based on its key. If not found returns 0 and a non-nil error.
func (*Store) GetUint32Default ¶
GetUint32Default returns the entry's value as uint32, based on its key. If not found returns "def".
func (*Store) GetUint64 ¶
GetUint64 returns the entry's value as uint64, based on its key. If not found returns 0 and a non-nil error.
func (*Store) GetUint64Default ¶
GetUint64Default returns the entry's value as uint64, based on its key. If not found returns "def".
func (*Store) GetUint8 ¶
GetUint8 returns the entry's value as uint8, based on its key. If not found returns 0 and a non-nil error.
func (*Store) GetUint8Default ¶
GetUint8Default returns the entry's value as uint8, based on its key. If not found returns "def".
func (*Store) GetUintDefault ¶
GetUintDefault returns the entry's value as uint, based on its key. If not found returns "def".
func (*Store) GetWeekday ¶ added in v12.2.0
GetWeekday returns the stored time.Weekday value based on its "key". If does not exist or the stored key's value is not a weekday it returns the time.Sunday value and a not found error.
func (*Store) Remove ¶
Remove deletes an entry linked to that "key", returns true if an entry is actually removed.
func (*Store) Save ¶
Save same as `Set` However, if "immutable" is true then saves it as immutable (same as `SetImmutable`).
Returns the entry and true if it was just inserted, meaning that it will return the entry and a false boolean if the entry exists and it has been updated.
func (*Store) Set ¶
Set saves a value to the key-value storage. Returns the entry and true if it was just inserted, meaning that it will return the entry and a false boolean if the entry exists and it has been updated.
See `SetImmutable` and `Get`.
func (*Store) SetImmutable ¶
SetImmutable saves a value to the key-value storage. Unlike `Set`, the output value cannot be changed by the caller later on (when .Get OR .Set)
An Immutable entry should be only changed with a `SetImmutable`, simple `Set` will not work if the entry was immutable, for your own safety.
Returns the entry and true if it was just inserted, meaning that it will return the entry and a false boolean if the entry exists and it has been updated.
Use it consistently, it's far slower than `Set`. Read more about muttable and immutable go types: https://stackoverflow.com/a/8021081
func (*Store) SimpleDate ¶ added in v12.2.0
SimpleDate calls GetTime and formats the time as "yyyyy/mm/dd". It returns an empty string if the key does not exist or the stored value on "key" is not a time.Time type.
type StringEntry ¶ added in v12.2.0
type StringEntry struct { Key string `json:"key" msgpack:"key" yaml:"Key" toml:"Value"` Value string `json:"value" msgpack:"value" yaml:"Value" toml:"Value"` }
StringEntry is just a key-value wrapped by a struct. See Context.URLParamsSorted method.
type ValueSetter ¶
ValueSetter is the interface which can be accepted as a generic solution of RequestParams or memstore when Set is the only requirement, i.e internally on macro/template/TemplateParam#Eval:paramChanger.