#[macro_use] extern crate log; use log::LevelFilter; use yopa; use yopa::model; use yopa::model::DataType; use crate::yopa::insert::{InsertObj, InsertValue, InsertRel}; use crate::yopa::data::TypedValue; fn main() { simple_logging::log_to_stderr(LevelFilter::Debug); if let Err(e) = _main() { error!("{:?}", e); } } fn _main() -> anyhow::Result<()> { simple_logging::log_to_stderr(LevelFilter::Debug); let mut store = yopa::InMemoryStorage::new(); let Recipe = store.define_object(model::ObjectModel { id: Default::default(), name: "recipe".to_string(), parent_tpl_id: None })?; let RecipeTitle = store.define_property(model::PropertyModel { id: Default::default(), parent_tpl_id: Recipe, name: "title".to_string(), optional: false, multiple: false, data_type: DataType::String, default: None })?; let PrepHours = store.define_property(model::PropertyModel { id: Default::default(), parent_tpl_id: Recipe, name: "prep_hours".to_string(), optional: true, multiple: false, data_type: DataType::Decimal, default: None })?; let Book = store.define_object(model::ObjectModel { id: Default::default(), name: "book".to_string(), parent_tpl_id: None })?; let BookName = store.define_property(model::PropertyModel { id: Default::default(), parent_tpl_id: Book, name: "name".to_string(), optional: false, multiple: false, data_type: DataType::String, default: None })?; let BookToRecipe = store.define_relation(model::RelationModel { id: Default::default(), object_tpl_id: Recipe, name: "book reference".to_string(), optional: true, multiple: true, related_tpl_id: Book })?; let BookToRecipePage = store.define_property(model::PropertyModel { id: Default::default(), parent_tpl_id: BookToRecipe, name: "page".to_string(), optional: true, multiple: false, data_type: DataType::Integer, default: None })?; debug!("{:#?}", store); let MyBook1 = store.insert_object(InsertObj { model_id: Book, values: vec![ InsertValue::new(BookName, TypedValue::String("Recipe Book 1".into())), ], relations: vec![], })?; store.insert_object(InsertObj { model_id: Recipe, values: vec![ InsertValue::new(RecipeTitle, TypedValue::String("Pancakes".into())), ], relations: vec![ InsertRel { model_id: BookToRecipe, related_id: MyBook1, values: vec![ InsertValue::new(BookToRecipePage, TypedValue::Integer(123)) ] } ], }); debug!("{:#?}", store); Ok(()) }