use std::time::Duration;
use serde::{Deserialize, Serialize};
#[derive(
Debug,
Clone,
Serialize,
Deserialize,
Default,
)]
pub struct SearchOptions {
pub max_items: Option<usize>,
pub headers: Vec<(String, String)>,
pub timeout_seconds: Option<u64>,
}
#[derive(Debug, Clone, Copy)]
pub struct FederationOptions {
pub deduplicate: bool,
pub unify_response: bool,
pub max_concurrent: usize,
pub per_catalog_timeout: Duration,
pub retry: RetryPolicy,
pub max_items_per_catalog: usize,
}
#[derive(Debug, Clone, Copy)]
pub struct RetryPolicy {
pub max_attempts: u8,
pub initial_backoff: Duration,
pub max_backoff: Duration,
}
impl Default for FederationOptions {
fn default() -> Self {
Self {
deduplicate: true,
unify_response: true,
max_concurrent: 8,
per_catalog_timeout: Duration::from_secs(30),
retry: RetryPolicy::default(),
max_items_per_catalog: 1000,
}
}
}
impl Default for RetryPolicy {
fn default() -> Self {
Self {
max_attempts: 2,
initial_backoff: Duration::from_millis(100),
max_backoff: Duration::from_millis(2000),
}
}
}