1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//! Picante is an async incremental query runtime, inspired by Salsa but designed for Tokio-first
//! pipelines.
//!
//! Picante provides:
//!
//! - Inputs via [`InputIngredient`]
//! - Async derived queries via [`DerivedIngredient`]
//! - Dependency tracking via Tokio task-local frames
//! - Snapshot persistence via [`persist`] (using `facet` + `facet-postcard`, **no serde**)
//!
//! ## Minimal example
//!
//! ```no_run
//! use picante::{DerivedIngredient, DynIngredient, HasRuntime, IngredientLookup, IngredientRegistry, InputIngredient, QueryKindId, Runtime};
//! use std::sync::Arc;
//!
//! #[derive(Default)]
//! struct Db {
//! runtime: Runtime,
//! ingredients: IngredientRegistry<Db>,
//! }
//!
//! impl HasRuntime for Db {
//! fn runtime(&self) -> &Runtime {
//! &self.runtime
//! }
//! }
//!
//! impl IngredientLookup for Db {
//! fn ingredient(&self, kind: QueryKindId) -> Option<&dyn DynIngredient<Self>> {
//! self.ingredients.ingredient(kind)
//! }
//! }
//!
//! # fn main() -> picante::PicanteResult<()> {
//! # let rt = tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap();
//! # rt.block_on(async {
//! let db = Db::default();
//!
//! let text: Arc<InputIngredient<String, String>> =
//! Arc::new(InputIngredient::new(QueryKindId(1), "Text"));
//!
//! let len: Arc<DerivedIngredient<Db, String, u64>> = {
//! let text = text.clone();
//! Arc::new(DerivedIngredient::new(QueryKindId(2), "Len", move |db, key| {
//! let text = text.clone();
//! Box::pin(async move {
//! let s = text.get(db, &key)?.unwrap_or_default();
//! Ok(s.len() as u64)
//! })
//! }))
//! };
//!
//! text.set(&db, "a".into(), "hello".into());
//! assert_eq!(len.get(&db, "a".into()).await?, 5);
//! # Ok(()) }) }
//! ```
pub
pub use ;
pub use ;
pub use ;
pub use ;
pub use Revision;
pub use ;
pub use ;