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
#![deny(missing_docs)]
#![deny(unsafe_code)]
//! Kitsune P2p Fetch Queue Logic
use kitsune_p2p_types::{KAgent, KOpHash, KSpace};
mod backoff;
mod error;
mod pool;
mod queue;
mod respond;
mod rough_sized;
mod source;
#[cfg(any(test, feature = "test_utils"))]
pub mod test_utils;
pub use error::*;
pub use pool::*;
pub use respond::*;
pub use rough_sized::*;
pub use source::FetchSource;
/// Determine what should be fetched.
#[derive(
Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, serde::Deserialize, serde::Serialize,
)]
#[serde(tag = "type", content = "key", rename_all = "camelCase")]
pub enum FetchKey {
/// Fetch via op hash.
Op(KOpHash),
}
/// A fetch "unit" that can be de-duplicated.
#[derive(Debug, Clone, PartialEq)]
pub struct FetchPoolPush {
/// Description of what to fetch.
pub key: FetchKey,
/// The space this op belongs to
pub space: KSpace,
/// The source to fetch the op from
pub source: FetchSource,
/// The approximate size of the item
pub size: Option<RoughInt>,
/// If specified, the author of the op.
/// NOTE: author is additive-only. That is, an op without an author
/// is the same as one *with* an author, but should be updated to
/// include the author. It is UB to have two FetchKeys with the
/// same op_hash, but different authors.
pub author: Option<KAgent>,
/// Opaque "context" to be provided and interpreted by the host.
pub context: Option<FetchContext>,
}
/// Usage agnostic context data.
#[derive(
Default,
Debug,
Clone,
Copy,
PartialEq,
Eq,
serde::Serialize,
serde::Deserialize,
derive_more::Deref,
derive_more::From,
)]
pub struct FetchContext(pub u32);