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.
Associated Types
These associated types need to implement Prefixer
, so that they can be useful arguments
for prefix()
, sub_prefix()
, and their key-deserializable variants.
type Suffix: KeyDeserialize
type Suffix: KeyDeserialize
These associated types need to implement KeyDeserialize
, so that they can be returned from
range_de()
and friends.
Required methods
Provided methods
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.