Skip to main content

KeyExtract

Trait KeyExtract 

Source
pub trait KeyExtract {
    // Required method
    fn extract(&self) -> Vec<KeyPart>;
}
Expand description

Trait for types that can contribute to a cache key.

Implement this trait for your custom types to control how they appear in cache keys. Blanket implementations are provided for common primitive types.

§Example

use hitbox_fn::KeyExtract;
use hitbox_core::KeyPart;

struct UserId(u64);

impl KeyExtract for UserId {
    fn extract(&self) -> Vec<KeyPart> {
        vec![KeyPart::new("user_id", Some(self.0.to_string()))]
    }
}

§Automatic composition

When all elements of a tuple implement KeyExtract, the tuple automatically implements it too by concatenating all key parts:

// If UserId and TenantId both implement KeyExtract,
// then Args<(UserId, TenantId)> automatically implements KeyExtract
let args = Args((UserId(42), TenantId("acme".into())));
let parts = args.extract();
// parts = [KeyPart("user_id", "42"), KeyPart("tenant", "acme")]

Required Methods§

Source

fn extract(&self) -> Vec<KeyPart>

Extract key parts from this value.

Implementations on Foreign Types§

Source§

impl KeyExtract for &str

Source§

impl KeyExtract for bool

Source§

impl KeyExtract for i8

Source§

impl KeyExtract for i16

Source§

impl KeyExtract for i32

Source§

impl KeyExtract for i64

Source§

impl KeyExtract for i128

Source§

impl KeyExtract for isize

Source§

impl KeyExtract for u8

Source§

impl KeyExtract for u16

Source§

impl KeyExtract for u32

Source§

impl KeyExtract for u64

Source§

impl KeyExtract for u128

Source§

impl KeyExtract for usize

Source§

impl KeyExtract for String

Source§

impl<T: KeyExtract + ?Sized> KeyExtract for &T

Source§

impl<T: KeyExtract> KeyExtract for Option<T>

Implementors§

Source§

impl KeyExtract for Args<()>

Source§

impl<T0: KeyExtract> KeyExtract for Args<(T0,)>

Source§

impl<T0: KeyExtract, T1: KeyExtract> KeyExtract for Args<(T0, T1)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract> KeyExtract for Args<(T0, T1, T2)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract, T5: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4, T5)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract, T5: KeyExtract, T6: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4, T5, T6)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract, T5: KeyExtract, T6: KeyExtract, T7: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4, T5, T6, T7)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract, T5: KeyExtract, T6: KeyExtract, T7: KeyExtract, T8: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4, T5, T6, T7, T8)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract, T5: KeyExtract, T6: KeyExtract, T7: KeyExtract, T8: KeyExtract, T9: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract, T5: KeyExtract, T6: KeyExtract, T7: KeyExtract, T8: KeyExtract, T9: KeyExtract, T10: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>

Source§

impl<T0: KeyExtract, T1: KeyExtract, T2: KeyExtract, T3: KeyExtract, T4: KeyExtract, T5: KeyExtract, T6: KeyExtract, T7: KeyExtract, T8: KeyExtract, T9: KeyExtract, T10: KeyExtract, T11: KeyExtract> KeyExtract for Args<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)>

Source§

impl<T> KeyExtract for Skipped<T>

Source§

impl<T: KeyExtract> KeyExtract for Arg<T>