#query-language #data-model #model #graphql #test #object-store

mock-store

简单 Rust 内存模拟存储库,用于测试和原型设计(支持 modql)

2 个不稳定版本

0.2.0 2023 年 4 月 15 日
0.1.0 2023 年 4 月 6 日

#404 in 测试

MIT/Apache

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