1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use serde::de::DeserializeOwned;
use serde::ser::Serialize;
use serde_json::{from_value, to_value};
use ::document::*;
use std::marker::Sized;

/// Trait that provides methods that can be used to switch between abstract `Document` and concrete `Model` implementors (such as your custom data models)
pub trait Model<T: Serialize + DeserializeOwned + Sized> {
    fn from_document(d: Document) -> T {
        from_value(d.get_data()).unwrap()
    }

    fn to_document(&self) -> Document where Self: Serialize {
        Document::new(to_value(self).unwrap())
    }
}