pub struct Database<PA> { /* private fields */ }Expand description
A Database provides methods to access data.
The config private field is wrapped in an Arc to be shared among threads.
Implementations§
Source§impl<PA> Database<PA>
impl<PA> Database<PA>
Sourcepub fn new(path: PA, extension: Option<&str>) -> Self
pub fn new(path: PA, extension: Option<&str>) -> Self
Create a new Database with a mandatory path and an optional file extension.
§Examples
use csv_db::Database;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct User {
id: usize,
first_name: String,
last_name: String,
age: u32,
}
#[tokio::main]
async fn main() {
let db = Database::new("data", None);
}Sourcepub async fn find<T, P>(
&self,
collection: &str,
predicate: P,
) -> Result<Vec<T>, Box<dyn Error>>
pub async fn find<T, P>( &self, collection: &str, predicate: P, ) -> Result<Vec<T>, Box<dyn Error>>
Find documents by filtering with a predicate on a collection.
§Examples
use csv_db::Database;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct User {
id: usize,
first_name: String,
last_name: String,
age: u32,
}
#[tokio::main]
async fn main() {
let db = Database::new("data", None);
let user = User {
id: 1,
first_name: String::from("First"),
last_name: String::from("Last"),
age: 20,
};
let adults = db
.find("users", |u: &User| u.age >= 18)
.await
.expect("Problem searching user.");
}Sourcepub async fn insert<T>(
&self,
collection: &str,
document: T,
) -> Result<(), Box<dyn Error>>
pub async fn insert<T>( &self, collection: &str, document: T, ) -> Result<(), Box<dyn Error>>
Insert a new document into a collection.
§Examples
use csv_db::Database;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct User {
id: usize,
first_name: String,
last_name: String,
age: u32,
}
#[tokio::main]
async fn main() {
let db = Database::new("data", None);
let user = User {
id: 1,
first_name: String::from("First"),
last_name: String::from("Last"),
age: 20,
};
db.insert("users", user)
.await
.expect("Problem inserting user.");
}Sourcepub async fn delete<T, P>(
&self,
collection: &str,
predicate: P,
) -> Result<(), Box<dyn Error>>
pub async fn delete<T, P>( &self, collection: &str, predicate: P, ) -> Result<(), Box<dyn Error>>
Delete a document by filtering with a predicate from a collection.
§Examples
use csv_db::Database;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct User {
id: usize,
first_name: String,
last_name: String,
age: u32,
}
#[tokio::main]
async fn main() {
let db = Database::new("data", None);
db.delete("users", |u: &&User| u.id == 1)
.await
.expect("Problem deleting user.");
}Sourcepub async fn update<T, P>(
&self,
collection: &str,
document: T,
predicate: P,
) -> Result<(), Box<dyn Error>>
pub async fn update<T, P>( &self, collection: &str, document: T, predicate: P, ) -> Result<(), Box<dyn Error>>
Update a document by filtering with a predicate on a collection.
§Examples
use csv_db::Database;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct User {
id: usize,
first_name: String,
last_name: String,
age: u32,
}
#[tokio::main]
async fn main() {
let db = Database::new("data", None);
let user = User {
id: 1,
first_name: String::from("First"),
last_name: String::from("Last"),
age: 21,
};
db.update("users", user, |u: &&User| u.id == 1)
.await
.expect("Problem updating user.");
}Auto Trait Implementations§
impl<PA> Freeze for Database<PA>
impl<PA> RefUnwindSafe for Database<PA>where
PA: RefUnwindSafe,
impl<PA> Send for Database<PA>
impl<PA> Sync for Database<PA>
impl<PA> Unpin for Database<PA>
impl<PA> UnwindSafe for Database<PA>where
PA: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more