use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub const DISCOVERY_QUERY_DEDUP_TTL_SECS: u64 = 60;
pub const DISCOVERY_QUERY_DEFAULT_MAX_HOPS: u8 = 10;
pub const DISCOVERY_GOSSIP_MAX_FANOUT: usize = 5;
pub const DISCOVERY_INITIAL_BROADCAST_MAX: usize = 20;
pub const DISCOVERY_QUERY_MAX_DEDUP_ENTRIES: usize = 10_000;
pub const MAX_SERVICE_PAYLOAD_SIZE: usize = 131_072; pub const MAX_SERVICE_BODY_SIZE: usize = 65_536; pub const MAX_SERVICE_METHOD_LEN: usize = 256;
pub const VALID_SERVICE_STATUSES: &[&str] = &["ok", "not_found", "error"];
pub const SVC_MESSAGE_PREFIX: &str = "__SVC_";
pub const SVC_DISCOVER_QUERY: &str = "__SVC_DISC_Q__";
pub const SVC_DISCOVER_RESPONSE: &str = "__SVC_DISC_R__";
pub const SVC_REQUEST: &str = "__SVC_REQ__";
pub const SVC_RESPONSE: &str = "__SVC_RESP__";
fn default_discovery_max_hops() -> u8 {
DISCOVERY_QUERY_DEFAULT_MAX_HOPS
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct ServiceDiscoveryQueryPayload {
pub query_id: String,
pub originator: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub service_id: Option<String>,
#[serde(default = "default_discovery_max_hops")]
pub remaining_hops: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct ServiceDiscoveryResponsePayload {
pub query_id: String,
pub service_id: String,
pub version: String,
pub provider_peer_id: String,
pub capabilities: HashMap<String, String>,
pub hop_count: u8,
#[serde(default)]
pub originator: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct ServiceRequestPayload {
pub request_id: String,
pub service_id: String,
pub method: String,
pub body: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct ServiceResponsePayload {
pub request_id: String,
pub service_id: String,
pub status: String,
pub body: String,
}