a small relational database with user-editable schema for manual data entry
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yopa/yopa-test/src/main.rs

121 lines
3.1 KiB

3 years ago
#[macro_use] extern crate log;
use log::LevelFilter;
use yopa::{model, InMemoryStorage};
3 years ago
use yopa::model::DataType;
use yopa::insert::{InsertObj, InsertValue, InsertRel};
use yopa::data::TypedValue;
3 years ago
3 years ago
fn main() {
simple_logging::log_to_stderr(LevelFilter::Debug);
main_test_recipes().unwrap();
3 years ago
}
#[allow(non_snake_case)]
fn main_test_recipes() -> anyhow::Result<()> {
3 years ago
simple_logging::log_to_stderr(LevelFilter::Debug);
let mut store = yopa::InMemoryStorage::new();
3 years ago
let Recipe = store.define_object(model::ObjectModel {
3 years ago
id: Default::default(),
name: "recipe".to_string(),
parent: None
3 years ago
})?;
3 years ago
let RecipeTitle = store.define_property(model::PropertyModel {
3 years ago
id: Default::default(),
object: Recipe,
3 years ago
name: "title".to_string(),
optional: false,
multiple: false,
data_type: DataType::String,
default: None
})?;
3 years ago
let _PrepHours = store.define_property(model::PropertyModel {
3 years ago
id: Default::default(),
object: Recipe,
3 years ago
name: "prep_hours".to_string(),
optional: true,
multiple: false,
data_type: DataType::Decimal,
default: None
})?;
3 years ago
let Book = store.define_object(model::ObjectModel {
3 years ago
id: Default::default(),
name: "book".to_string(),
parent: None
3 years ago
})?;
3 years ago
let BookName = store.define_property(model::PropertyModel {
3 years ago
id: Default::default(),
object: Book,
3 years ago
name: "name".to_string(),
3 years ago
optional: false,
multiple: false,
3 years ago
data_type: DataType::String,
default: None
3 years ago
})?;
3 years ago
let BookToRecipe = store.define_relation(model::RelationModel {
3 years ago
id: Default::default(),
object: Recipe,
3 years ago
name: "book reference".to_string(),
optional: true,
multiple: true,
related: Book
3 years ago
})?;
let BookToRecipePage = store.define_property(model::PropertyModel {
id: Default::default(),
object: BookToRecipe,
3 years ago
name: "page".to_string(),
optional: false,
3 years ago
multiple: false,
data_type: DataType::Integer,
default: None
})?;
debug!("{:#?}", store);
3 years ago
let MyBook1 = store.insert_object(InsertObj {
model_id: Book,
values: vec![
InsertValue::new(BookName, TypedValue::String("Recipe Book 1".into())),
3 years ago
],
relations: vec![],
})?;
store.insert_object(InsertObj {
model_id: Recipe,
values: vec![
InsertValue::new(RecipeTitle, TypedValue::String("Pancakes".into())),
3 years ago
],
relations: vec![
InsertRel {
model_id: BookToRecipe,
related_id: MyBook1,
values: vec![
InsertValue::new(BookToRecipePage, TypedValue::Integer(123))
3 years ago
]
}
],
})?;
3 years ago
debug!("{:#?}", store);
let as_s = serde_json::to_string_pretty(&store).unwrap();
println!("{}", as_s);
3 years ago
let _back : InMemoryStorage = serde_json::from_str(&as_s)?;
debug!("After unpack: {:#?}", store);
3 years ago
Ok(())
}