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;
// Required method
fn key(&self) -> Vec<Key<'_>>;
// Provided methods
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>
Object Safety§
Implementations on Foreign Types§
source§impl<'a> PrimaryKey<'a> for &'a str
impl<'a> PrimaryKey<'a> for &'a str
source§impl<'a> PrimaryKey<'a> for &'a [u8]
impl<'a> PrimaryKey<'a> for &'a [u8]
source§impl<'a> PrimaryKey<'a> for i8
impl<'a> PrimaryKey<'a> for i8
source§impl<'a> PrimaryKey<'a> for i16
impl<'a> PrimaryKey<'a> for i16
source§impl<'a> PrimaryKey<'a> for i32
impl<'a> PrimaryKey<'a> for i32
source§impl<'a> PrimaryKey<'a> for i64
impl<'a> PrimaryKey<'a> for i64
source§impl<'a> PrimaryKey<'a> for i128
impl<'a> PrimaryKey<'a> for i128
source§impl<'a> PrimaryKey<'a> for u8
impl<'a> PrimaryKey<'a> for u8
source§impl<'a> PrimaryKey<'a> for u16
impl<'a> PrimaryKey<'a> for u16
source§impl<'a> PrimaryKey<'a> for u32
impl<'a> PrimaryKey<'a> for u32
source§impl<'a> PrimaryKey<'a> for u64
impl<'a> PrimaryKey<'a> for u64
source§impl<'a> PrimaryKey<'a> for u128
impl<'a> PrimaryKey<'a> for u128
source§impl<'a> PrimaryKey<'a> for ()
impl<'a> PrimaryKey<'a> for ()
source§impl<'a> PrimaryKey<'a> for String
impl<'a> PrimaryKey<'a> for String
source§impl<'a> PrimaryKey<'a> for Vec<u8>
impl<'a> PrimaryKey<'a> for Vec<u8>
source§impl<'a> PrimaryKey<'a> for Addr
impl<'a> PrimaryKey<'a> for Addr
owned variant.