native_db 0.8.2

Drop-in embedded database
Documentation
use crate::db_type::{Key, KeyDefinition, KeyOptions, ToKeyDefinition};

#[derive(Eq, PartialEq, Clone)]
pub(crate) struct TableFilter {
    pub(crate) table_name: String,
    pub(crate) key_filter: KeyFilter,
}

#[derive(Eq, PartialEq, Clone)]
pub(crate) enum KeyFilter {
    Primary(Option<Key>),
    PrimaryStartWith(Key),
    Secondary(KeyDefinition<KeyOptions>, Option<Key>),
    SecondaryStartWith(KeyDefinition<KeyOptions>, Key),
}

impl TableFilter {
    pub(crate) fn new_primary(table_name: String, key: Option<Key>) -> Self {
        Self {
            table_name,
            key_filter: KeyFilter::Primary(key.map(|k| k.to_owned())),
        }
    }

    pub(crate) fn new_primary_start_with(table_name: String, key_prefix: Key) -> Self {
        Self {
            table_name,
            key_filter: KeyFilter::PrimaryStartWith(key_prefix.to_owned()),
        }
    }

    pub(crate) fn new_secondary<K: ToKeyDefinition<KeyOptions>>(
        table_name: String,
        key_def: &K,
        key: Option<Key>,
    ) -> Self {
        Self {
            table_name,
            key_filter: KeyFilter::Secondary(key_def.key_definition(), key.map(|k| k.to_owned())),
        }
    }

    pub(crate) fn new_secondary_start_with<K: ToKeyDefinition<KeyOptions>>(
        table_name: String,
        key: &K,
        key_prefix: Key,
    ) -> Self {
        Self {
            table_name,
            key_filter: KeyFilter::SecondaryStartWith(key.key_definition(), key_prefix.to_owned()),
        }
    }
}