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§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl PrimaryKey<'_> for ()
impl PrimaryKey<'_> for ()
Source§impl PrimaryKey<'_> for Addr
owned variant.
impl PrimaryKey<'_> for Addr
owned variant.