2 个不稳定版本
0.2.0 | 2023 年 4 月 15 日 |
---|---|
0.1.0 | 2023 年 4 月 6 日 |
#404 in 测试
14KB
176 行
Rust mock-store 是一个简单的 Rust 内存模拟存储库,用于测试和原型设计(具有 modql 实现)。
请不要在生产代码中使用此库。
mock-store 使用 modql 用于过滤功能。这也是实验 modql 的好方法。
示例
请参阅 examples/readme.rs 以获取完整的源代码。
// -- Store is Send + Sync (backed by Arc/Mutex).
let store = Store::new();
// -- Insert the objects.
store.insert(Ticket {
id: 1,
title: "Ticket AAA".to_string(),
})?;
store.insert(Ticket {
id: 1,
title: "Ticket BBB".to_string(),
})?;
// -- List all tickets (no filter).
let all_tickets = store.list::<Ticket>(None)?;
// [Ticket { id: 1, title: "Ticket AAA" }, Ticket { id: 1, title: "Ticket BBB" }]
println!("{:<20}: {all_tickets:?}", "all tickets");
// -- List with filter (using modql: https://github.com/jeremychone/rust-modql)
let filter: FilterGroup = vec![("title", OpValString::Contains("AA".to_string())).into()].into();
let double_a_tickets = store.list::<Ticket>(filter)?;
// [Ticket { id: 1, title: "Ticket AAA" }]
println!("{:<20}: {double_a_tickets:?}", "double_a_tickets");
// -- Update with filter.
let filter: FilterGroup = vec![("title", OpValString::Contains("BB".to_string())).into()].into();
let count = store.update::<Ticket, _>(filter, |mut ticket| {
ticket.title = "TICKET BB - UPDATE".to_string();
ticket
})?;
// 1
println!("{:<20}: {count:?}", "tickets updated");
// -- List all tickets again.
let all_tickets = store.list::<Ticket>(None)?;
// [Ticket { id: 1, title: "Ticket AAA" }, Ticket { id: 1, title: "TICKET BB - UPDATE" }]
println!("{:<20}: {all_tickets:?}", "all tickets");
// -- Delete is: store.delete::<Ticket>(filter)?;
库范围
- 此库不适用于生产用途。
- 主要用于编写测试或概念验证,而不需要实际数据存储。
- 优先考虑易用性和便利性,而不是性能。
当前限制
- 功能:目前仅支持匹配数字、布尔值和字符串的一个层级。
- 性能:存储库按类型划分,但对象存储包含序列化的 serde_json Value。
- 性能:由于对象以 Value 存储的,在更新时,对象将被反序列化和重新序列化。
依赖项
~3–10MB
~92K SLoC