use native_db::*; use native_model::Model; use native_model::native_model; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, PartialEq, Debug)] #[native_model(id = 1, version = 1)] #[native_db] struct Item { #[primary_key] id: u32, #[secondary_key] name: String, } fn main() -> Result<(), db_type::Error> { let mut builder = DatabaseBuilder::new(); // Initialize the model builder.define::()?; // Create a database in memory let db = builder.create_in_memory()?; // Insert data (open a read-write transaction) let rw = db.rw_transaction().unwrap(); rw.insert(Item { id: 1, name: "red".to_string() })?; rw.insert(Item { id: 2, name: "green".to_string() })?; rw.insert(Item { id: 3, name: "blue".to_string() })?; rw.commit()?; // Open a read-only transaction let r = db.r_transaction()?; // Retrieve data with id=3 let retrieve_data: Item = r.get().primary(3_u32)?.unwrap(); println!("data id='3': {:?}", retrieve_data); // Iterate items with name starting with "red" for item in r.scan().secondary::(ItemKey::name)?.start_with("red") { println!("data name=\"red\": {:?}", item); } // Remove data (open a read-write transaction) let rw = db.rw_transaction()?; rw.remove(retrieve_data)?; rw.commit()?; Ok(()) }