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", so this trait is not object safe.
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
owned variant.
impl<'a> PrimaryKey<'a> for Addr
owned variant.