1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

extern crate serde;
pub use serde::{ser::Serialize, de::DeserializeOwned};

extern crate rusqlite;
use rusqlite::ToSql;


pub const OBJECT_KEY: &str = "__object";

/// Storable trait provides methods to support use with Store.
/// This should be auto-implemented using the `Smoldb` macro
pub trait Storable {
    type Indicies;

    /// Generate create table string
    fn sql_create(name: &str) -> String;

    /// Generate insert string
    fn sql_insert(table_name: &str) -> String;

    /// Generate select string
    fn sql_select(table_name: &str, indicies: &[Self::Indicies]) -> String;

    /// Generate delete string
    fn sql_update(table_name: &str, indicies: &[Self::Indicies]) -> String;

    /// Generate delete string
    fn sql_delete(table_name: &str, indicies: &[Self::Indicies]) -> String;

    /// Generate params from object body
    fn params<'a>(&'a self) -> Vec<Box<&'a dyn ToSql>>;
}