commonware_resolver/lib.rs
1//! Resolve data identified by a fixed-length key.
2
3use commonware_utils::Span;
4use std::future::Future;
5
6pub mod p2p;
7
8/// Notified when data is available, and must validate it.
9pub trait Consumer: Clone + Send + 'static {
10 /// Type used to uniquely identify data.
11 type Key: Span;
12
13 /// Type of data to retrieve.
14 type Value;
15
16 /// Type used to indicate why data is not available.
17 type Failure;
18
19 /// Deliver data to the consumer.
20 ///
21 /// Returns `true` if the data is valid.
22 fn deliver(&mut self, key: Self::Key, value: Self::Value) -> impl Future<Output = bool> + Send;
23
24 /// Let the consumer know that the data is not being fetched anymore.
25 ///
26 /// The failure is used to indicate why.
27 fn failed(&mut self, key: Self::Key, failure: Self::Failure)
28 -> impl Future<Output = ()> + Send;
29}
30
31/// Responsible for fetching data and notifying a `Consumer`.
32pub trait Resolver: Clone + Send + 'static {
33 /// Type used to uniquely identify data.
34 type Key: Span;
35
36 /// Initiate a fetch request.
37 fn fetch(&mut self, key: Self::Key) -> impl Future<Output = ()> + Send;
38
39 /// Cancel a fetch request.
40 fn cancel(&mut self, key: Self::Key) -> impl Future<Output = ()> + Send;
41
42 /// Cancel all fetch requests.
43 fn clear(&mut self) -> impl Future<Output = ()> + Send;
44
45 /// Retain only the fetch requests that satisfy the predicate.
46 fn retain(
47 &mut self,
48 predicate: impl Fn(&Self::Key) -> bool + Send + 'static,
49 ) -> impl Future<Output = ()> + Send;
50}