native_db_32bit/
model.rs

1use crate::db_type::{DatabaseKeyDefinition, DatabaseSecondaryKeyOptions, Error, Result};
2use std::collections::HashSet;
3
4#[derive(Clone, Debug)]
5pub struct DatabaseModel {
6    pub primary_key: DatabaseKeyDefinition<()>,
7    pub secondary_keys: HashSet<DatabaseKeyDefinition<DatabaseSecondaryKeyOptions>>,
8}
9
10impl DatabaseModel {
11    pub fn check_secondary_options<F>(
12        &self,
13        secondary_key: &DatabaseKeyDefinition<DatabaseSecondaryKeyOptions>,
14        check: F,
15    ) -> Result<()>
16    where
17        F: Fn(DatabaseSecondaryKeyOptions) -> bool,
18    {
19        let key = self
20            .secondary_keys
21            .get(secondary_key.into())
22            .ok_or_else(|| Error::SecondaryKeyDefinitionNotFound {
23                table: self.primary_key.unique_table_name.to_string(),
24                key: secondary_key.unique_table_name.clone(),
25            })?;
26
27        if check(key.options.clone()) {
28            Ok(())
29        } else {
30            Err(Error::SecondaryKeyConstraintMismatch {
31                table: self.primary_key.unique_table_name.to_string(),
32                key: secondary_key.unique_table_name.clone(),
33                got: key.options.clone(),
34            })
35        }
36    }
37}