Trait cw_storage_plus::PrimaryKey
source · pub trait PrimaryKey<'a>: Clone {
type Prefix: Prefixer<'a>;
type SubPrefix: Prefixer<'a>;
type Suffix: KeyDeserialize;
type SuperSuffix: KeyDeserialize;
fn key(&self) -> Vec<Key<'_>>;
fn joined_key(&self) -> Vec<u8> { ... }
fn joined_extra_key(&self, key: &[u8]) -> Vec<u8> { ... }
}
Expand description
PrimaryKey
needs to be implemented for types that want to be a Map
(or Map
-like) key,
or part of a key.
In particular, it defines a series of types that help iterating over parts of a (composite) key:
Prefix
: Prefix is eager. That is, except for empty keys, it’s always “one less” than the full key.
Suffix
: Suffix is the complement of prefix.
SubPrefix
: Sub-prefix is “one less” than prefix.
SuperSuffix
: Super-suffix is “one more” than suffix. The complement of sub-prefix.
By example, for a 2-tuple (T, U)
:
T
: Prefix.
U
: Suffix.
()
: Sub-prefix.
(T, U)
: Super-suffix.
SubPrefix
and SuperSuffix
only make real sense in the case of triples. Still, they need to be
consistently defined for all types.
Required Associated Types
sourcetype Prefix: Prefixer<'a>
type Prefix: Prefixer<'a>
These associated types need to implement Prefixer
, so that they can be useful arguments
for prefix()
, sub_prefix()
, and their key-deserializable variants.
type SubPrefix: Prefixer<'a>
sourcetype Suffix: KeyDeserialize
type Suffix: KeyDeserialize
These associated types need to implement KeyDeserialize
, so that they can be returned from
range_de()
and friends.
type SuperSuffix: KeyDeserialize
Required Methods
Provided Methods
fn joined_key(&self) -> Vec<u8>
fn joined_extra_key(&self, key: &[u8]) -> Vec<u8>
Implementations on Foreign Types
sourceimpl<'a> PrimaryKey<'a> for ()
impl<'a> PrimaryKey<'a> for ()
sourceimpl<'a> PrimaryKey<'a> for &'a [u8]
impl<'a> PrimaryKey<'a> for &'a [u8]
sourceimpl<'a> PrimaryKey<'a> for &'a str
impl<'a> PrimaryKey<'a> for &'a str
sourceimpl<'a, T: PrimaryKey<'a> + Prefixer<'a> + KeyDeserialize, U: PrimaryKey<'a> + KeyDeserialize> PrimaryKey<'a> for (T, U)
impl<'a, T: PrimaryKey<'a> + Prefixer<'a> + KeyDeserialize, U: PrimaryKey<'a> + KeyDeserialize> PrimaryKey<'a> for (T, U)
sourceimpl<'a, T: PrimaryKey<'a> + Prefixer<'a>, U: PrimaryKey<'a> + Prefixer<'a> + KeyDeserialize, V: PrimaryKey<'a> + KeyDeserialize> PrimaryKey<'a> for (T, U, V)
impl<'a, T: PrimaryKey<'a> + Prefixer<'a>, U: PrimaryKey<'a> + Prefixer<'a> + KeyDeserialize, V: PrimaryKey<'a> + KeyDeserialize> PrimaryKey<'a> for (T, U, V)
sourceimpl<'a> PrimaryKey<'a> for Vec<u8>
impl<'a> PrimaryKey<'a> for Vec<u8>
sourceimpl<'a> PrimaryKey<'a> for String
impl<'a> PrimaryKey<'a> for String
sourceimpl<'a> PrimaryKey<'a> for &'a Addr
impl<'a> PrimaryKey<'a> for &'a Addr
type safe version to ensure address was validated before use.
sourceimpl<'a> PrimaryKey<'a> for Addr
impl<'a> PrimaryKey<'a> for Addr
owned variant.