native_db-32bit 0.5.4

Drop-in embedded database
Documentation
use crate::db_type::{
    DatabaseInnerKeyValue, DatabaseKeyDefinition, DatabaseSecondaryKeyOptions, KeyDefinition,
};

#[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<DatabaseInnerKeyValue>),
    PrimaryStartWith(DatabaseInnerKeyValue),
    Secondary(
        DatabaseKeyDefinition<DatabaseSecondaryKeyOptions>,
        Option<DatabaseInnerKeyValue>,
    ),
    SecondaryStartWith(
        DatabaseKeyDefinition<DatabaseSecondaryKeyOptions>,
        DatabaseInnerKeyValue,
    ),
}

impl TableFilter {
    pub(crate) fn new_primary(table_name: String, key: Option<DatabaseInnerKeyValue>) -> 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: DatabaseInnerKeyValue,
    ) -> Self {
        Self {
            table_name,
            key_filter: KeyFilter::PrimaryStartWith(key_prefix.to_owned()),
        }
    }

    pub(crate) fn new_secondary<K: KeyDefinition<DatabaseSecondaryKeyOptions>>(
        table_name: String,
        key_def: &K,
        key: Option<DatabaseInnerKeyValue>,
    ) -> Self {
        Self {
            table_name,
            key_filter: KeyFilter::Secondary(key_def.database_key(), key.map(|k| k.to_owned())),
        }
    }

    pub(crate) fn new_secondary_start_with<K: KeyDefinition<DatabaseSecondaryKeyOptions>>(
        table_name: String,
        key: &K,
        key_prefix: DatabaseInnerKeyValue,
    ) -> Self {
        Self {
            table_name,
            key_filter: KeyFilter::SecondaryStartWith(key.database_key(), key_prefix.to_owned()),
        }
    }
}