Trait BiHashItem

Source
pub trait BiHashItem {
    type K1<'a>: Eq + Hash
       where Self: 'a;
    type K2<'a>: Eq + Hash
       where Self: 'a;

    // Required methods
    fn key1(&self) -> Self::K1<'_>;
    fn key2(&self) -> Self::K2<'_>;
    fn upcast_key1<'short, 'long: 'short>(
        long: Self::K1<'long>,
    ) -> Self::K1<'short>;
    fn upcast_key2<'short, 'long: 'short>(
        long: Self::K2<'long>,
    ) -> Self::K2<'short>;
}
Expand description

An item in a BiHashMap.

This trait is used to define the keys.

§Examples

use iddqd::{BiHashItem, BiHashMap, bi_upcast};

// Define a struct with two keys.
#[derive(Debug, PartialEq, Eq, Hash)]
struct MyPair {
    id: u32,
    name: String,
}

// Implement BiHashItem for the struct.
impl BiHashItem for MyPair {
    type K1<'a> = u32;
    type K2<'a> = &'a str;

    fn key1(&self) -> Self::K1<'_> {
        self.id
    }

    fn key2(&self) -> Self::K2<'_> {
        &self.name
    }

    bi_upcast!();
}

// Create a BiHashMap and insert items.
let mut map = BiHashMap::new();
map.insert_unique(MyPair { id: 1, name: "Alice".to_string() }).unwrap();
map.insert_unique(MyPair { id: 2, name: "Bob".to_string() }).unwrap();

Required Associated Types§

Source

type K1<'a>: Eq + Hash where Self: 'a

The first key type.

Source

type K2<'a>: Eq + Hash where Self: 'a

The second key type.

Required Methods§

Source

fn key1(&self) -> Self::K1<'_>

Retrieves the first key.

Source

fn key2(&self) -> Self::K2<'_>

Retrieves the second key.

Source

fn upcast_key1<'short, 'long: 'short>(long: Self::K1<'long>) -> Self::K1<'short>

Upcasts the first key to a shorter lifetime, in effect asserting that the lifetime 'a on BiHashItem::K1 is covariant.

Typically implemented via the bi_upcast macro.

Source

fn upcast_key2<'short, 'long: 'short>(long: Self::K2<'long>) -> Self::K2<'short>

Upcasts the second key to a shorter lifetime, in effect asserting that the lifetime 'a on BiHashItem::K2 is covariant.

Typically implemented via the bi_upcast macro.

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<'b, T: 'b + ?Sized + BiHashItem> BiHashItem for &'b T

Source§

type K1<'a> = <T as BiHashItem>::K1<'a> where Self: 'a

Source§

type K2<'a> = <T as BiHashItem>::K2<'a> where Self: 'a

Source§

fn key1(&self) -> Self::K1<'_>

Source§

fn key2(&self) -> Self::K2<'_>

Source§

fn upcast_key1<'short, 'long: 'short>(long: Self::K1<'long>) -> Self::K1<'short>
where Self: 'long,

Source§

fn upcast_key2<'short, 'long: 'short>(long: Self::K2<'long>) -> Self::K2<'short>
where Self: 'long,

Source§

impl<'b, T: 'b + ?Sized + BiHashItem> BiHashItem for &'b mut T

Source§

type K1<'a> = <T as BiHashItem>::K1<'a> where Self: 'a

Source§

type K2<'a> = <T as BiHashItem>::K2<'a> where Self: 'a

Source§

fn key1(&self) -> Self::K1<'_>

Source§

fn key2(&self) -> Self::K2<'_>

Source§

fn upcast_key1<'short, 'long: 'short>(long: Self::K1<'long>) -> Self::K1<'short>
where Self: 'long,

Source§

fn upcast_key2<'short, 'long: 'short>(long: Self::K2<'long>) -> Self::K2<'short>
where Self: 'long,

Source§

impl<T: ?Sized + BiHashItem> BiHashItem for Box<T>

Source§

type K1<'a> = <T as BiHashItem>::K1<'a> where Self: 'a

Source§

type K2<'a> = <T as BiHashItem>::K2<'a> where Self: 'a

Source§

fn key1(&self) -> Self::K1<'_>

Source§

fn key2(&self) -> Self::K2<'_>

Source§

fn upcast_key1<'short, 'long: 'short>(long: Self::K1<'long>) -> Self::K1<'short>

Source§

fn upcast_key2<'short, 'long: 'short>(long: Self::K2<'long>) -> Self::K2<'short>

Source§

impl<T: ?Sized + BiHashItem> BiHashItem for Rc<T>

Source§

type K1<'a> = <T as BiHashItem>::K1<'a> where Self: 'a

Source§

type K2<'a> = <T as BiHashItem>::K2<'a> where Self: 'a

Source§

fn key1(&self) -> Self::K1<'_>

Source§

fn key2(&self) -> Self::K2<'_>

Source§

fn upcast_key1<'short, 'long: 'short>(long: Self::K1<'long>) -> Self::K1<'short>

Source§

fn upcast_key2<'short, 'long: 'short>(long: Self::K2<'long>) -> Self::K2<'short>

Source§

impl<T: ?Sized + BiHashItem> BiHashItem for Arc<T>

Source§

type K1<'a> = <T as BiHashItem>::K1<'a> where Self: 'a

Source§

type K2<'a> = <T as BiHashItem>::K2<'a> where Self: 'a

Source§

fn key1(&self) -> Self::K1<'_>

Source§

fn key2(&self) -> Self::K2<'_>

Source§

fn upcast_key1<'short, 'long: 'short>(long: Self::K1<'long>) -> Self::K1<'short>

Source§

fn upcast_key2<'short, 'long: 'short>(long: Self::K2<'long>) -> Self::K2<'short>

Implementors§