{
  "schemaVersion": 1,
  "generator": "Tree-sitter Rust module traversal",
  "scope": "Eight Filament workspace packages. Syntax-derived public declarations, methods and module conditions; documentation comments omitted because some source examples and readiness claims are stale. Not compiler-resolved rustdoc or runtime certification.",
  "packages": [
    {
      "name": "filament-core",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-core",
      "manifestSha256": "047b137b5501693efcffd5f983f16926abb9013cd7e5de1c0d735cd4e1fd1cc4",
      "features": {},
      "publish": true,
      "url": "/reference/filament/filament-core",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-core/src/lib.rs",
          "sha256": "b115f55524d8c21bb6c5d0f920970e37bc8969cd0ea69b4a4a9478ceda7d8e53",
          "attributes": "",
          "items": [
            {
              "name": "config",
              "kind": "module",
              "signature": "pub mod config;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "instance",
              "kind": "module",
              "signature": "pub mod instance;",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "metrics",
              "kind": "module",
              "signature": "pub mod metrics;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "pub use config::{Config, InterfaceConfig, LogConfig, MetricsConfig, ShutdownConfig};",
              "kind": "use_declaration",
              "signature": "pub use config::{Config, InterfaceConfig, LogConfig, MetricsConfig, ShutdownConfig};",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "pub use error::{Error, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{Error, Result};",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use instance::{Instance, InstanceMode};",
              "kind": "use_declaration",
              "signature": "pub use instance::{Instance, InstanceMode};",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "pub use metrics::Metrics;",
              "kind": "use_declaration",
              "signature": "pub use metrics::Metrics;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "::init_logging",
              "kind": "function_item",
              "signature": "pub fn init_logging(config: &LogConfig) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 61
            }
          ],
          "parseErrors": false
        },
        {
          "module": "config",
          "source": "sigil/weave/filament/filament-core/src/config.rs",
          "sha256": "1d7c003f92ca8c3b5f5465562c3ef3ad4b1095c6877150e1a9692effabfd6bf6",
          "attributes": "",
          "items": [
            {
              "name": "config::Config",
              "kind": "struct_item",
              "signature": "pub struct Config {\n/// Enable transport layer (routing and forwarding).\n\n#[serde(default = \"default_enable_transport\")]\npub enable_transport: bool,\n/// Share this instance with other processes via RPC.\n\n#[serde(default = \"default_share_instance\")]\npub share_instance: bool,\n/// Human-readable instance name.\n\n#[serde(default = \"default_instance_name\")]\npub instance_name: String,\n/// Configuration file path (for hot-reload).\n\n#[serde(skip)]\npub config_path: Option<PathBuf>,\n/// Network interfaces configuration.\n\n#[serde(default)]\npub interfaces: Vec<InterfaceConfig>,\n/// Logging configuration.\n\n#[serde(default)]\npub logging: LogConfig,\n/// Metrics configuration.\n\n#[serde(default)]\npub metrics: MetricsConfig,\n/// Shutdown configuration.\n\n#[serde(default)]\npub shutdown: ShutdownConfig\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 23
            },
            {
              "name": "config::Config::from_file",
              "kind": "function_item",
              "signature": "pub fn from_file<P: AsRef<Path>>(path: P) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 86
            },
            {
              "name": "config::Config::from_toml_str",
              "kind": "function_item",
              "signature": "pub fn from_toml_str(s: &str) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 105
            },
            {
              "name": "config::Config::save",
              "kind": "function_item",
              "signature": "pub fn save<P: AsRef<Path>>(&self, path: P) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 116
            },
            {
              "name": "config::Config::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 128
            },
            {
              "name": "config::Config::merge",
              "kind": "function_item",
              "signature": "pub fn merge(&mut self, other: &Self);",
              "docs": "",
              "attributes": "",
              "line": 157
            },
            {
              "name": "config::InterfaceConfig",
              "kind": "struct_item",
              "signature": "pub struct InterfaceConfig {\n/// Interface type (auto, tcp_server, tcp_client, udp, serial).\n\n#[serde(rename = \"type\")]\npub interface_type: String,\n/// Interface name (for identification).\n\npub name: String,\n/// Operating mode.\n\n#[serde(default = \"default_interface_mode\")]\npub mode: InterfaceMode,\n/// Whether this interface is enabled.\n\n#[serde(default = \"default_enabled\")]\npub enabled: bool,\n/// Interface-specific configuration.\n\n#[serde(flatten)]\npub config: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 173
            },
            {
              "name": "config::InterfaceConfig::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 196
            },
            {
              "name": "config::LogConfig",
              "kind": "struct_item",
              "signature": "pub struct LogConfig {\n/// Log level (strand, debug, info, warn, error).\n\n#[serde(default = \"default_log_level\")]\npub level: String,\n/// Output format (text or json).\n\n#[serde(default)]\npub json: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 216
            },
            {
              "name": "config::MetricsConfig",
              "kind": "struct_item",
              "signature": "pub struct MetricsConfig {\n/// Enable Prometheus metrics exposition.\n\n#[serde(default = \"default_metrics_enabled\")]\npub enabled: bool,\n/// Metrics HTTP server port.\n\n#[serde(default = \"default_metrics_port\")]\npub port: u16,\n/// Metrics HTTP server bind address.\n\n#[serde(default = \"default_metrics_bind\")]\npub bind: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 237
            },
            {
              "name": "config::ShutdownConfig",
              "kind": "struct_item",
              "signature": "pub struct ShutdownConfig {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 263
            },
            {
              "name": "config::ShutdownConfig::timeout",
              "kind": "function_item",
              "signature": "pub fn timeout(&self) -> Duration;",
              "docs": "",
              "attributes": "",
              "line": 279
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/filament/filament-core/src/error.rs",
          "sha256": "8bd5fe93c2abe77172bc4f5735db43830b85d670cb1ebe954f96bed8f3d3cbc7",
          "attributes": "",
          "items": [
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, Error>;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "error::Error",
              "kind": "enum_item",
              "signature": "pub enum Error {\n    /// Configuration error\n    #[error(\"configuration error: {0}\")]\n    Config(String),\n\n    /// I/O error\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// TOML parsing error\n    #[error(\"TOML parsing error: {0}\")]\n    TomlParse(#[from] toml::de::Error),\n\n    /// TOML serialization error\n    #[error(\"TOML serialization error: {0}\")]\n    TomlSerialize(#[from] toml::ser::Error),\n\n    /// JSON error\n    #[error(\"JSON error: {0}\")]\n    Json(#[from] serde_json::Error),\n\n    /// Instance already running\n    #[error(\"instance already running\")]\n    InstanceAlreadyRunning,\n\n    /// Instance not running\n    #[error(\"instance not running\")]\n    InstanceNotRunning,\n\n    /// Instance initialization failed\n    #[error(\"instance initialization failed: {0}\")]\n    InstanceInit(String),\n\n    /// Shutdown error\n    #[error(\"shutdown error: {0}\")]\n    Shutdown(String),\n\n    /// Timeout error\n    #[error(\"operation timed out after {0:?}\")]\n    Timeout(std::time::Duration),\n\n    /// File watch error\n    #[error(\"file watch error: {0}\")]\n    FileWatch(String),\n\n    /// Invalid instance mode\n    #[error(\"invalid instance mode: {0}\")]\n    InvalidInstanceMode(String),\n\n    /// Metrics error\n    #[error(\"metrics error: {0}\")]\n    Metrics(String),\n\n    /// Type conversion error\n    #[error(\"type conversion error: {0}\")]\n    TypeConversion(String),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 13
            },
            {
              "name": "error::Error::is_recoverable",
              "kind": "function_item",
              "signature": "pub fn is_recoverable(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "error::Error::code",
              "kind": "function_item",
              "signature": "pub fn code(&self) -> &'static str;",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "error::ErrorContext",
              "kind": "trait_item",
              "signature": "pub trait ErrorContext<T> {\n    /// Add context to an error.\n    fn context(self, msg: impl fmt::Display) -> Result<T>;\n\n    /// Add context to an error using a closure.\n    fn with_context<F>(self, f: F) -> Result<T>\n    where\n        F: FnOnce() -> String;\n}",
              "docs": "",
              "attributes": "",
              "line": 102
            }
          ],
          "parseErrors": false
        },
        {
          "module": "instance",
          "source": "sigil/weave/filament/filament-core/src/instance.rs",
          "sha256": "063fa1a1c9c3e56ba8db34cb0e2c2be2c1dd9a7bc38b1b74d94e90abbff7ab23",
          "attributes": "",
          "items": [
            {
              "name": "instance::InstanceMode",
              "kind": "enum_item",
              "signature": "pub enum InstanceMode {\n    /// Shared instance accessible via RPC.\n    Shared,\n    /// Isolated instance (private to this process).\n    Isolated,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 18
            },
            {
              "name": "instance::Instance",
              "kind": "struct_item",
              "signature": "pub struct Instance {\n\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 76
            },
            {
              "name": "instance::Instance::new",
              "kind": "function_item",
              "signature": "pub async fn new(config: Config) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 87
            },
            {
              "name": "instance::Instance::run",
              "kind": "function_item",
              "signature": "pub async fn run(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 177
            },
            {
              "name": "instance::Instance::shutdown",
              "kind": "function_item",
              "signature": "pub async fn shutdown(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 247
            },
            {
              "name": "instance::Instance::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> Config;",
              "docs": "",
              "attributes": "",
              "line": 298
            },
            {
              "name": "instance::Instance::mode",
              "kind": "function_item",
              "signature": "pub fn mode(&self) -> InstanceMode;",
              "docs": "",
              "attributes": "",
              "line": 303
            },
            {
              "name": "instance::Instance::uptime_secs",
              "kind": "function_item",
              "signature": "pub fn uptime_secs(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 308
            },
            {
              "name": "instance::Instance::metrics",
              "kind": "function_item",
              "signature": "pub fn metrics(&self) -> Metrics;",
              "docs": "",
              "attributes": "",
              "line": 313
            },
            {
              "name": "instance::Instance::is_running",
              "kind": "function_item",
              "signature": "pub fn is_running(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 318
            },
            {
              "name": "instance::Instance::is_shutting_down",
              "kind": "function_item",
              "signature": "pub fn is_shutting_down(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 323
            },
            {
              "name": "instance::Instance::is_stopped",
              "kind": "function_item",
              "signature": "pub fn is_stopped(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 328
            }
          ],
          "parseErrors": false
        },
        {
          "module": "metrics",
          "source": "sigil/weave/filament/filament-core/src/metrics.rs",
          "sha256": "8defb42d187ff9e99d447943abce32b0666b6a516921f2a28e1a86726c957bd2",
          "attributes": "",
          "items": [
            {
              "name": "metrics::Metrics",
              "kind": "struct_item",
              "signature": "pub struct Metrics {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 100
            },
            {
              "name": "metrics::Metrics::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "metrics::Metrics::uptime_secs",
              "kind": "function_item",
              "signature": "pub fn uptime_secs(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 119
            },
            {
              "name": "metrics::Metrics::record_packet_sent",
              "kind": "function_item",
              "signature": "pub fn record_packet_sent(&self, packet_type: &str);",
              "docs": "",
              "attributes": "",
              "line": 124
            },
            {
              "name": "metrics::Metrics::record_packet_received",
              "kind": "function_item",
              "signature": "pub fn record_packet_received(&self, packet_type: &str);",
              "docs": "",
              "attributes": "",
              "line": 129
            },
            {
              "name": "metrics::Metrics::record_bytes_sent",
              "kind": "function_item",
              "signature": "pub fn record_bytes_sent(&self, interface: &str, bytes: u64);",
              "docs": "",
              "attributes": "",
              "line": 134
            },
            {
              "name": "metrics::Metrics::record_bytes_received",
              "kind": "function_item",
              "signature": "pub fn record_bytes_received(&self, interface: &str, bytes: u64);",
              "docs": "",
              "attributes": "",
              "line": 141
            },
            {
              "name": "metrics::Metrics::set_active_destinations",
              "kind": "function_item",
              "signature": "pub fn set_active_destinations(&self, dest_type: &str, count: usize);",
              "docs": "",
              "attributes": "",
              "line": 148
            },
            {
              "name": "metrics::Metrics::set_active_links",
              "kind": "function_item",
              "signature": "pub fn set_active_links(&self, state: &str, count: usize);",
              "docs": "",
              "attributes": "",
              "line": 155
            },
            {
              "name": "metrics::Metrics::set_routing_table_size",
              "kind": "function_item",
              "signature": "pub fn set_routing_table_size(&self, table: &str, size: usize);",
              "docs": "",
              "attributes": "",
              "line": 160
            },
            {
              "name": "metrics::Metrics::record_packet_processing_time",
              "kind": "function_item",
              "signature": "pub fn record_packet_processing_time(&self, operation: &str, duration: std::time::Duration);",
              "docs": "",
              "attributes": "",
              "line": 167
            },
            {
              "name": "metrics::Metrics::record_link_establishment_time",
              "kind": "function_item",
              "signature": "pub fn record_link_establishment_time(&self, result: &str, duration: std::time::Duration);",
              "docs": "",
              "attributes": "",
              "line": 174
            },
            {
              "name": "metrics::Metrics::record_error",
              "kind": "function_item",
              "signature": "pub fn record_error(&self, error_type: &str, component: &str);",
              "docs": "",
              "attributes": "",
              "line": 181
            },
            {
              "name": "metrics::Metrics::export",
              "kind": "function_item",
              "signature": "pub fn export(&self) -> Result<String>;",
              "docs": "",
              "attributes": "",
              "line": 190
            },
            {
              "name": "metrics::Timer",
              "kind": "struct_item",
              "signature": "pub struct Timer {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug)]",
              "line": 215
            },
            {
              "name": "metrics::Timer::new",
              "kind": "function_item",
              "signature": "pub fn new(operation: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 222
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": []
    },
    {
      "name": "filament-types",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-types",
      "manifestSha256": "3c0e859e58335c41fb302712d0268b13ca5c4da7e252e4a18937b2072aa3c2a1",
      "features": {},
      "publish": true,
      "url": "/reference/filament/filament-types",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-types/src/lib.rs",
          "sha256": "5614b41ed9e42839aa6a43ea87550320e481e573b6aff43bb09aaca9f9f4fd0c",
          "attributes": "",
          "items": [
            {
              "name": "primitives",
              "kind": "module",
              "signature": "pub mod primitives;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "pub use primitives::{DestinationHash, InterfaceMode, LinkId, ANNOUNCE_CAP, MTU};",
              "kind": "use_declaration",
              "signature": "pub use primitives::{DestinationHash, InterfaceMode, LinkId, ANNOUNCE_CAP, MTU};",
              "docs": "",
              "attributes": "",
              "line": 30
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, Error>;",
              "docs": "",
              "attributes": "",
              "line": 33
            },
            {
              "name": "::Error",
              "kind": "enum_item",
              "signature": "pub enum Error {\n    /// Invalid hash length\n    #[error(\"invalid hash length: expected {expected}, got {actual}\")]\n    InvalidHashLength {\n        /// Expected length\n        expected: usize,\n        /// Actual length\n        actual: usize,\n    },\n\n    /// Invalid interface mode\n    #[error(\"invalid interface mode: {0}\")]\n    InvalidInterfaceMode(String),\n\n    /// Serialization error\n    #[error(\"serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, thiserror::Error)]",
              "line": 37
            }
          ],
          "parseErrors": false
        },
        {
          "module": "primitives",
          "source": "sigil/weave/filament/filament-types/src/primitives.rs",
          "sha256": "73f1aeb1e3ec49fb5a74644e19999ec9043d263a59fe731f82370ddf0fbf30ec",
          "attributes": "",
          "items": [
            {
              "name": "primitives::MTU",
              "kind": "const_item",
              "signature": "pub const MTU: usize;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "primitives::ANNOUNCE_CAP",
              "kind": "const_item",
              "signature": "pub const ANNOUNCE_CAP: f32;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "primitives::DestinationHash",
              "kind": "struct_item",
              "signature": "pub struct DestinationHash(pub [u8; 16]);",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 35
            },
            {
              "name": "primitives::DestinationHash::from_bytes",
              "kind": "function_item",
              "signature": "pub const fn from_bytes(bytes: [u8; 16]) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 40
            },
            {
              "name": "primitives::DestinationHash::from_slice",
              "kind": "function_item",
              "signature": "pub fn from_slice(bytes: &[u8]) -> crate::Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "primitives::DestinationHash::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 16];",
              "docs": "",
              "attributes": "#[inline]",
              "line": 63
            },
            {
              "name": "primitives::DestinationHash::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "",
              "attributes": "",
              "line": 68
            },
            {
              "name": "primitives::DestinationHash::from_hex",
              "kind": "function_item",
              "signature": "pub fn from_hex(s: &str) -> crate::Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "primitives::LinkId",
              "kind": "struct_item",
              "signature": "pub struct LinkId(pub [u8; 16]);",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 124
            },
            {
              "name": "primitives::LinkId::from_bytes",
              "kind": "function_item",
              "signature": "pub const fn from_bytes(bytes: [u8; 16]) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 129
            },
            {
              "name": "primitives::LinkId::from_slice",
              "kind": "function_item",
              "signature": "pub fn from_slice(bytes: &[u8]) -> crate::Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 138
            },
            {
              "name": "primitives::LinkId::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8; 16];",
              "docs": "",
              "attributes": "#[inline]",
              "line": 152
            },
            {
              "name": "primitives::LinkId::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "",
              "attributes": "",
              "line": 157
            },
            {
              "name": "primitives::InterfaceMode",
              "kind": "enum_item",
              "signature": "pub enum InterfaceMode {\n    /// Full transport participation (routing and forwarding)\n    Full,\n    /// Gateway to another network segment\n    Gateway,\n    /// Access point functionality\n    AccessPoint,\n    /// Mobile node with intermittent connectivity\n    Roaming,\n    /// Edge node with limited forwarding\n    Boundary,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]",
              "line": 184
            },
            {
              "name": "primitives::InterfaceMode::allows_forwarding",
              "kind": "function_item",
              "signature": "pub const fn allows_forwarding(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 199
            },
            {
              "name": "primitives::InterfaceMode::participates_in_routing",
              "kind": "function_item",
              "signature": "pub const fn participates_in_routing(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 207
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": []
    },
    {
      "name": "filament-packet",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-packet",
      "manifestSha256": "3b4184977837171b0b5d701ce482f707ab98adb6db893f4d849d500b346eb7a7",
      "features": {},
      "publish": true,
      "url": "/reference/filament/filament-packet",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-packet/src/lib.rs",
          "sha256": "ffacba6034a072fa782d1c59d5f79e4c64adfcdcc8352673f471f7481bdc7416",
          "attributes": "",
          "items": [
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 101
            },
            {
              "name": "header",
              "kind": "module",
              "signature": "pub mod header;",
              "docs": "",
              "attributes": "",
              "line": 102
            },
            {
              "name": "ifac",
              "kind": "module",
              "signature": "pub mod ifac;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "packet",
              "kind": "module",
              "signature": "pub mod packet;",
              "docs": "",
              "attributes": "",
              "line": 104
            },
            {
              "name": "validation",
              "kind": "module",
              "signature": "pub mod validation;",
              "docs": "",
              "attributes": "",
              "line": 105
            },
            {
              "name": "wire",
              "kind": "module",
              "signature": "pub mod wire;",
              "docs": "",
              "attributes": "",
              "line": 106
            },
            {
              "name": "pub use error::{PacketError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{PacketError, Result};",
              "docs": "",
              "attributes": "",
              "line": 109
            },
            {
              "name": "pub use header::Header;",
              "kind": "use_declaration",
              "signature": "pub use header::Header;",
              "docs": "",
              "attributes": "",
              "line": 110
            },
            {
              "name": "pub use ifac::Ifac;",
              "kind": "use_declaration",
              "signature": "pub use ifac::Ifac;",
              "docs": "",
              "attributes": "",
              "line": 111
            },
            {
              "name": "pub use packet::Packet;",
              "kind": "use_declaration",
              "signature": "pub use packet::Packet;",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "pub use validation::PacketValidator;",
              "kind": "use_declaration",
              "signature": "pub use validation::PacketValidator;",
              "docs": "",
              "attributes": "",
              "line": 113
            },
            {
              "name": "pub use wire::{\n    DestinationType, HeaderType, PacketType, PropagationType, DEST_HASH_SIZE, HEADER_SIZE,\n    LINK_ID_SIZE, MAX_HOP_COUNT, MAX_IFAC_SIZE, MIN_IFAC_SIZE, MTU,\n};",
              "kind": "use_declaration",
              "signature": "pub use wire::{\n    DestinationType, HeaderType, PacketType, PropagationType, DEST_HASH_SIZE, HEADER_SIZE,\n    LINK_ID_SIZE, MAX_HOP_COUNT, MAX_IFAC_SIZE, MIN_IFAC_SIZE, MTU,\n};",
              "docs": "",
              "attributes": "",
              "line": 114
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/filament/filament-packet/src/error.rs",
          "sha256": "d098af3dc5ae4d683ce24f2c8eb1f796bb485a5bb9de6cd95cbeaf2211db7de1",
          "attributes": "",
          "items": [
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, PacketError>;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "error::PacketError",
              "kind": "enum_item",
              "signature": "pub enum PacketError {\n    /// Insufficient data in buffer.\n    #[error(\"insufficient data: expected at least {expected} bytes, got {actual}\")]\n    InsufficientData {\n        /// Expected number of bytes.\n        expected: usize,\n        /// Actual number of bytes available.\n        actual: usize,\n    },\n\n    /// Invalid packet type in header.\n    #[error(\"invalid packet type in header\")]\n    InvalidPacketType,\n\n    /// Invalid destination type in header.\n    #[error(\"invalid destination type in header\")]\n    InvalidDestinationType,\n\n    /// Packet exceeds maximum transmission unit.\n    #[error(\"packet size {size} exceeds MTU {mtu}\")]\n    ExceedsMTU {\n        /// Actual packet size.\n        size: usize,\n        /// Maximum allowed size (MTU).\n        mtu: usize,\n    },\n\n    /// Hop count has reached zero.\n    #[error(\"hop count expired\")]\n    HopCountExpired,\n\n    /// IFAC field size is invalid.\n    #[error(\"IFAC size {size} is outside valid range {min}-{max} bytes\")]\n    InvalidIfacSize {\n        /// Actual IFAC size.\n        size: usize,\n        /// Minimum allowed size.\n        min: usize,\n        /// Maximum allowed size.\n        max: usize,\n    },\n\n    /// Address field has invalid size.\n    #[error(\"invalid address size: expected {expected}, got {actual}\")]\n    InvalidAddressSize {\n        /// Expected address size.\n        expected: usize,\n        /// Actual address size.\n        actual: usize,\n    },\n\n    /// Packet is malformed or corrupted.\n    #[error(\"malformed packet: {reason}\")]\n    Malformed {\n        /// Reason for malformation.\n        reason: String,\n    },\n\n    /// Data payload is too large for packet.\n    #[error(\"data payload ({size} bytes) too large for packet (max {max} bytes)\")]\n    PayloadTooLarge {\n        /// Actual payload size.\n        size: usize,\n        /// Maximum allowed payload size.\n        max: usize,\n    },\n\n    /// Missing required field.\n    #[error(\"missing required field: {field}\")]\n    MissingField {\n        /// Name of missing field.\n        field: &'static str,\n    },\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug, Clone, PartialEq, Eq)]",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "header",
          "source": "sigil/weave/filament/filament-packet/src/header.rs",
          "sha256": "75003f2037c3adfe5b6b73aa871799393fd3b0b056d6ebdd99d58c8db10cd4a0",
          "attributes": "",
          "items": [
            {
              "name": "header::Header",
              "kind": "struct_item",
              "signature": "pub struct Header {\n/// Whether IFAC authentication is included.\n\npub ifac_flag: bool,\n/// Header type (Header1 = 16 bytes, Header2 = 32 bytes).\n\npub header_type: HeaderType,\n/// Whether context byte is included.\n\npub context_flag: bool,\n/// Propagation type (Broadcast or Transport).\n\npub propagation_type: PropagationType,\n/// Destination type.\n\npub destination_type: DestinationType,\n/// Packet type.\n\npub packet_type: PacketType,\n/// Hop count (0-255, decremented by transport nodes).\n\npub hop_count: u8\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]",
              "line": 24
            },
            {
              "name": "header::Header::new",
              "kind": "function_item",
              "signature": "pub const fn new(packet_type: PacketType, destination_type: DestinationType) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 50
            },
            {
              "name": "header::Header::with_ifac",
              "kind": "function_item",
              "signature": "pub const fn with_ifac(mut self, enabled: bool) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 64
            },
            {
              "name": "header::Header::with_header_type",
              "kind": "function_item",
              "signature": "pub const fn with_header_type(mut self, header_type: HeaderType) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 71
            },
            {
              "name": "header::Header::with_context",
              "kind": "function_item",
              "signature": "pub const fn with_context(mut self, enabled: bool) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 78
            },
            {
              "name": "header::Header::with_propagation",
              "kind": "function_item",
              "signature": "pub const fn with_propagation(mut self, propagation: PropagationType) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 85
            },
            {
              "name": "header::Header::with_hop_count",
              "kind": "function_item",
              "signature": "pub const fn with_hop_count(mut self, hop_count: u8) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 92
            },
            {
              "name": "header::Header::encode",
              "kind": "function_item",
              "signature": "pub const fn encode(&self) -> [u8; HEADER_SIZE];",
              "docs": "",
              "attributes": "#[inline]",
              "line": 101
            },
            {
              "name": "header::Header::decode",
              "kind": "function_item",
              "signature": "pub fn decode(bytes: &[u8]) -> Result<Self>;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 125
            },
            {
              "name": "header::Header::address_size",
              "kind": "function_item",
              "signature": "pub const fn address_size(&self) -> usize;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 155
            },
            {
              "name": "header::Header::min_packet_size",
              "kind": "function_item",
              "signature": "pub const fn min_packet_size(&self) -> usize;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 161
            },
            {
              "name": "header::Header::decrement_hop_count",
              "kind": "function_item",
              "signature": "pub fn decrement_hop_count(&mut self) -> Result<()>;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 180
            },
            {
              "name": "header::Header::is_hop_count_expired",
              "kind": "function_item",
              "signature": "pub const fn is_hop_count_expired(&self) -> bool;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 190
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ifac",
          "source": "sigil/weave/filament/filament-packet/src/ifac.rs",
          "sha256": "28394213cc3e4d364c2b08d62aa46bdf2e4f39ca9576a7e9566236c70aec9081",
          "attributes": "",
          "items": [
            {
              "name": "ifac::Ifac",
              "kind": "struct_item",
              "signature": "pub struct Ifac {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash)]",
              "line": 15
            },
            {
              "name": "ifac::Ifac::new",
              "kind": "function_item",
              "signature": "pub fn new(signature: impl Into<Bytes>) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 27
            },
            {
              "name": "ifac::Ifac::with_size_bits",
              "kind": "function_item",
              "signature": "pub fn with_size_bits(size_bits: usize, signature: impl Into<Bytes>) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "ifac::Ifac::size",
              "kind": "function_item",
              "signature": "pub const fn size(&self) -> usize;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 78
            },
            {
              "name": "ifac::Ifac::size_bits",
              "kind": "function_item",
              "signature": "pub const fn size_bits(&self) -> usize;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 84
            },
            {
              "name": "ifac::Ifac::signature",
              "kind": "function_item",
              "signature": "pub fn signature(&self) -> &Bytes;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 90
            },
            {
              "name": "ifac::Ifac::into_signature",
              "kind": "function_item",
              "signature": "pub fn into_signature(self) -> Bytes;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 96
            },
            {
              "name": "ifac::Ifac::encode",
              "kind": "function_item",
              "signature": "pub fn encode(&self) -> Vec<u8>;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 105
            },
            {
              "name": "ifac::Ifac::parse",
              "kind": "function_item",
              "signature": "pub fn parse(bytes: &[u8], expected_size: usize) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 110
            }
          ],
          "parseErrors": false
        },
        {
          "module": "packet",
          "source": "sigil/weave/filament/filament-packet/src/packet.rs",
          "sha256": "21b379573c0dd9f79c6a1fcc40ac501f7bbeb1df3b557405ee19335d17522650",
          "attributes": "",
          "items": [
            {
              "name": "packet::Packet",
              "kind": "struct_item",
              "signature": "pub struct Packet {\n/// Packet header (2 bytes).\n\npub header: Header,\n/// Interface Authentication Code (0-64 bytes, optional).\n\npub ifac: Option<Bytes>,\n/// Destination hash (16 bytes) or dual addresses (32 bytes).\n\npub addresses: Bytes,\n/// Context byte (1 byte, optional).\n\npub context: Option<u8>,\n/// Packet data payload (variable length).\n\npub data: Bytes\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 15
            },
            {
              "name": "packet::Packet::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        packet_type: PacketType,\n        destination_type: DestinationType,\n        addresses: impl Into<Bytes>,\n        data: impl Into<Bytes>,\n    ) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "packet::Packet::with_ifac",
              "kind": "function_item",
              "signature": "pub fn with_ifac(mut self, ifac: impl Into<Bytes>) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "packet::Packet::with_header_type",
              "kind": "function_item",
              "signature": "pub fn with_header_type(mut self, header_type: HeaderType) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 89
            },
            {
              "name": "packet::Packet::with_context",
              "kind": "function_item",
              "signature": "pub fn with_context(mut self, context: u8) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "packet::Packet::with_propagation",
              "kind": "function_item",
              "signature": "pub fn with_propagation(mut self, propagation: PropagationType) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "packet::Packet::with_hop_count",
              "kind": "function_item",
              "signature": "pub fn with_hop_count(mut self, hop_count: u8) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 118
            },
            {
              "name": "packet::Packet::parse",
              "kind": "function_item",
              "signature": "pub fn parse(bytes: impl Into<Bytes>) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 126
            },
            {
              "name": "packet::Packet::encode",
              "kind": "function_item",
              "signature": "pub fn encode(&self) -> Result<Vec<u8>>;",
              "docs": "",
              "attributes": "",
              "line": 205
            },
            {
              "name": "packet::Packet::total_size",
              "kind": "function_item",
              "signature": "pub fn total_size(&self) -> usize;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 244
            },
            {
              "name": "packet::Packet::validate_size",
              "kind": "function_item",
              "signature": "pub fn validate_size(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 263
            },
            {
              "name": "packet::Packet::max_payload_size",
              "kind": "function_item",
              "signature": "pub fn max_payload_size(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 272
            },
            {
              "name": "packet::Packet::is_data",
              "kind": "function_item",
              "signature": "pub fn is_data(&self) -> bool;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 287
            },
            {
              "name": "packet::Packet::is_announce",
              "kind": "function_item",
              "signature": "pub fn is_announce(&self) -> bool;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 293
            },
            {
              "name": "packet::Packet::is_link_request",
              "kind": "function_item",
              "signature": "pub fn is_link_request(&self) -> bool;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 299
            },
            {
              "name": "packet::Packet::is_proof",
              "kind": "function_item",
              "signature": "pub fn is_proof(&self) -> bool;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 305
            }
          ],
          "parseErrors": false
        },
        {
          "module": "validation",
          "source": "sigil/weave/filament/filament-packet/src/validation.rs",
          "sha256": "fed58c43207d5362e1561fa1edba438ff9f5759729b6d026795751e3b4823ddd",
          "attributes": "",
          "items": [
            {
              "name": "validation::PacketValidator",
              "kind": "struct_item",
              "signature": "pub struct PacketValidator {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 12
            },
            {
              "name": "validation::PacketValidator::new",
              "kind": "function_item",
              "signature": "pub const fn new() -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 26
            },
            {
              "name": "validation::PacketValidator::with_max_size",
              "kind": "function_item",
              "signature": "pub const fn with_max_size(mut self, max_size: usize) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 36
            },
            {
              "name": "validation::PacketValidator::with_max_hop_count",
              "kind": "function_item",
              "signature": "pub const fn with_max_hop_count(mut self, max_hop_count: u8) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 43
            },
            {
              "name": "validation::PacketValidator::with_strict_ifac",
              "kind": "function_item",
              "signature": "pub const fn with_strict_ifac(mut self, strict: bool) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 50
            },
            {
              "name": "validation::PacketValidator::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self, packet: &Packet) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "validation::PacketValidator::validate_size",
              "kind": "function_item",
              "signature": "pub fn validate_size(&self, packet: &Packet) -> Result<()>;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 76
            },
            {
              "name": "validation::PacketValidator::validate_hop_count",
              "kind": "function_item",
              "signature": "pub fn validate_hop_count(&self, packet: &Packet) -> Result<()>;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 89
            },
            {
              "name": "validation::PacketValidator::validate_fields",
              "kind": "function_item",
              "signature": "pub fn validate_fields(&self, packet: &Packet) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 102
            },
            {
              "name": "validation::PacketValidator::validate_ifac",
              "kind": "function_item",
              "signature": "pub fn validate_ifac(&self, packet: &Packet) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 143
            }
          ],
          "parseErrors": false
        },
        {
          "module": "wire",
          "source": "sigil/weave/filament/filament-packet/src/wire.rs",
          "sha256": "e114ecc31510b8ea1adf7cca207d60445b0de5fa9372227e356081aabe1c5ab8",
          "attributes": "",
          "items": [
            {
              "name": "wire::MTU",
              "kind": "const_item",
              "signature": "pub const MTU: usize;",
              "docs": "",
              "attributes": "",
              "line": 7
            },
            {
              "name": "wire::MIN_PACKET_SIZE",
              "kind": "const_item",
              "signature": "pub const MIN_PACKET_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "wire::HEADER_SIZE",
              "kind": "const_item",
              "signature": "pub const HEADER_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 13
            },
            {
              "name": "wire::DEST_HASH_SIZE",
              "kind": "const_item",
              "signature": "pub const DEST_HASH_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 16
            },
            {
              "name": "wire::LINK_ID_SIZE",
              "kind": "const_item",
              "signature": "pub const LINK_ID_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 19
            },
            {
              "name": "wire::MIN_IFAC_SIZE",
              "kind": "const_item",
              "signature": "pub const MIN_IFAC_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "wire::MAX_IFAC_SIZE",
              "kind": "const_item",
              "signature": "pub const MAX_IFAC_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 25
            },
            {
              "name": "wire::CONTEXT_SIZE",
              "kind": "const_item",
              "signature": "pub const CONTEXT_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "wire::MAX_HOP_COUNT",
              "kind": "const_item",
              "signature": "pub const MAX_HOP_COUNT: u8;",
              "docs": "",
              "attributes": "",
              "line": 31
            },
            {
              "name": "wire::IFAC_FLAG_BIT",
              "kind": "const_item",
              "signature": "pub const IFAC_FLAG_BIT: u8;",
              "docs": "",
              "attributes": "",
              "line": 35
            },
            {
              "name": "wire::IFAC_FLAG",
              "kind": "const_item",
              "signature": "pub const IFAC_FLAG: u8;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "wire::HEADER_TYPE_BIT",
              "kind": "const_item",
              "signature": "pub const HEADER_TYPE_BIT: u8;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "wire::HEADER_TYPE",
              "kind": "const_item",
              "signature": "pub const HEADER_TYPE: u8;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "wire::CONTEXT_FLAG_BIT",
              "kind": "const_item",
              "signature": "pub const CONTEXT_FLAG_BIT: u8;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "wire::CONTEXT_FLAG",
              "kind": "const_item",
              "signature": "pub const CONTEXT_FLAG: u8;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "wire::PROPAGATION_TYPE_BIT",
              "kind": "const_item",
              "signature": "pub const PROPAGATION_TYPE_BIT: u8;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "wire::PROPAGATION_TYPE",
              "kind": "const_item",
              "signature": "pub const PROPAGATION_TYPE: u8;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "wire::DESTINATION_TYPE_MASK",
              "kind": "const_item",
              "signature": "pub const DESTINATION_TYPE_MASK: u8;",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "wire::DESTINATION_TYPE_SHIFT",
              "kind": "const_item",
              "signature": "pub const DESTINATION_TYPE_SHIFT: u8;",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "wire::PACKET_TYPE_MASK",
              "kind": "const_item",
              "signature": "pub const PACKET_TYPE_MASK: u8;",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "wire::PacketType",
              "kind": "enum_item",
              "signature": "pub enum PacketType {\n    /// Data packet (00).\n    Data = 0b00,\n    /// Announce packet (01).\n    Announce = 0b01,\n    /// Link request packet (10).\n    LinkRequest = 0b10,\n    /// Proof packet (11).\n    Proof = 0b11,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\n#[repr(u8)]",
              "line": 65
            },
            {
              "name": "wire::PacketType::from_header_byte",
              "kind": "function_item",
              "signature": "pub const fn from_header_byte(byte: u8) -> Option<Self>;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 79
            },
            {
              "name": "wire::PacketType::to_bits",
              "kind": "function_item",
              "signature": "pub const fn to_bits(self) -> u8;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 91
            },
            {
              "name": "wire::DestinationType",
              "kind": "enum_item",
              "signature": "pub enum DestinationType {\n    /// Single destination (encrypted, private key) (00).\n    Single = 0b00,\n    /// Group destination (symmetric key) (01).\n    Group = 0b01,\n    /// Plain destination (unencrypted broadcast) (10).\n    Plain = 0b10,\n    /// Link destination (encrypted channel) (11).\n    Link = 0b11,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\n#[repr(u8)]",
              "line": 99
            },
            {
              "name": "wire::DestinationType::from_header_byte",
              "kind": "function_item",
              "signature": "pub const fn from_header_byte(byte: u8) -> Option<Self>;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 113
            },
            {
              "name": "wire::DestinationType::to_bits",
              "kind": "function_item",
              "signature": "pub const fn to_bits(self) -> u8;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 125
            },
            {
              "name": "wire::PropagationType",
              "kind": "enum_item",
              "signature": "pub enum PropagationType {\n    /// Broadcast propagation (0).\n    Broadcast = 0,\n    /// Transport (multi-hop) propagation (1).\n    Transport = 1,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\n#[repr(u8)]",
              "line": 133
            },
            {
              "name": "wire::PropagationType::from_header_byte",
              "kind": "function_item",
              "signature": "pub const fn from_header_byte(byte: u8) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 143
            },
            {
              "name": "wire::PropagationType::to_bits",
              "kind": "function_item",
              "signature": "pub const fn to_bits(self) -> u8;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 153
            },
            {
              "name": "wire::HeaderType",
              "kind": "enum_item",
              "signature": "pub enum HeaderType {\n    /// Header 1: 16-byte single address (0).\n    Header1 = 0,\n    /// Header 2: 32-byte dual address (1).\n    Header2 = 1,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\n#[repr(u8)]",
              "line": 161
            },
            {
              "name": "wire::HeaderType::from_header_byte",
              "kind": "function_item",
              "signature": "pub const fn from_header_byte(byte: u8) -> Self;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 171
            },
            {
              "name": "wire::HeaderType::to_bits",
              "kind": "function_item",
              "signature": "pub const fn to_bits(self) -> u8;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 181
            },
            {
              "name": "wire::HeaderType::address_size",
              "kind": "function_item",
              "signature": "pub const fn address_size(self) -> usize;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 187
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": []
    },
    {
      "name": "filament-crypto",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-crypto",
      "manifestSha256": "c37108dbf898f22074732891fdbd1ee26eaacbb016548c17844bbb35ee6ff51f",
      "features": {},
      "publish": true,
      "url": "/reference/filament/filament-crypto",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-crypto/src/lib.rs",
          "sha256": "749a98f04ccb5da0e2c571a5e3256fd582e0cc0a72272509da0091fd5b5a6db4",
          "attributes": "",
          "items": [
            {
              "name": "encryption",
              "kind": "module",
              "signature": "pub mod encryption;",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "fernet",
              "kind": "module",
              "signature": "pub mod fernet;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "hkdf",
              "kind": "module",
              "signature": "pub mod hkdf;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "identity",
              "kind": "module",
              "signature": "pub mod identity;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "primitives",
              "kind": "module",
              "signature": "pub mod primitives;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use encryption::{decrypt, encrypt, EncryptionError};",
              "kind": "use_declaration",
              "signature": "pub use encryption::{decrypt, encrypt, EncryptionError};",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "pub use fernet::{Fernet, FernetToken};",
              "kind": "use_declaration",
              "signature": "pub use fernet::{Fernet, FernetToken};",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "pub use identity::{Identity, IdentityError, PublicIdentity};",
              "kind": "use_declaration",
              "signature": "pub use identity::{Identity, IdentityError, PublicIdentity};",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use primitives::{hmac_sha256, sha256, sha512, verify_hmac_sha256};",
              "kind": "use_declaration",
              "signature": "pub use primitives::{hmac_sha256, sha256, sha512, verify_hmac_sha256};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use error::CryptoError;",
              "kind": "use_declaration",
              "signature": "pub use error::CryptoError;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "error::CryptoError",
              "kind": "enum_item",
              "signature": "pub enum CryptoError {\n        /// Identity-related error\n        #[error(\"identity error: {0}\")]\n        Identity(#[from] crate::identity::IdentityError),\n\n        /// Encryption/decryption error\n        #[error(\"encryption error: {0}\")]\n        Encryption(#[from] crate::encryption::EncryptionError),\n\n        /// Fernet token error\n        #[error(\"fernet error: {0}\")]\n        Fernet(#[from] crate::fernet::FernetError),\n\n        /// HKDF error\n        #[error(\"hkdf error: {0}\")]\n        Hkdf(String),\n\n        /// Generic cryptographic failure\n        #[error(\"cryptographic operation failed: {0}\")]\n        General(String),\n    }",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 65
            }
          ],
          "parseErrors": false
        },
        {
          "module": "encryption",
          "source": "sigil/weave/filament/filament-crypto/src/encryption.rs",
          "sha256": "056bfa74877c2baade5d54147fd45628d8844f430b87e47bfde6cba1cbfde14f",
          "attributes": "",
          "items": [
            {
              "name": "encryption::EncryptionError",
              "kind": "enum_item",
              "signature": "pub enum EncryptionError {\n    /// Invalid key size\n    #[error(\"invalid key size: expected 32 bytes, got {0}\")]\n    InvalidKeySize(usize),\n\n    /// Invalid IV size\n    #[error(\"invalid IV size: expected 16 bytes, got {0}\")]\n    InvalidIvSize(usize),\n\n    /// HMAC verification failed (message tampered or corrupted)\n    #[error(\"authentication failed: message tampered or corrupted\")]\n    AuthenticationFailed,\n\n    /// Ciphertext too short\n    #[error(\"ciphertext too short: minimum 48 bytes (IV + MAC), got {0}\")]\n    CiphertextTooShort(usize),\n\n    /// Padding error during decryption\n    #[error(\"invalid padding\")]\n    InvalidPadding,\n\n    /// Encryption operation failed\n    #[error(\"encryption failed: {0}\")]\n    EncryptionFailed(String),\n\n    /// Decryption operation failed\n    #[error(\"decryption failed: {0}\")]\n    DecryptionFailed(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 39
            },
            {
              "name": "encryption::encrypt",
              "kind": "function_item",
              "signature": "pub fn encrypt(key: &[u8], plaintext: &[u8]) -> Result<Vec<u8>, EncryptionError>;",
              "docs": "",
              "attributes": "",
              "line": 106
            },
            {
              "name": "encryption::decrypt",
              "kind": "function_item",
              "signature": "pub fn decrypt(key: &[u8], ciphertext: &[u8]) -> Result<Vec<u8>, EncryptionError>;",
              "docs": "",
              "attributes": "",
              "line": 161
            }
          ],
          "parseErrors": false
        },
        {
          "module": "fernet",
          "source": "sigil/weave/filament/filament-crypto/src/fernet.rs",
          "sha256": "1672ecd1eb737f8a17c69aabcd368a30c818de015e0202e0ea9413fe84299b3c",
          "attributes": "",
          "items": [
            {
              "name": "fernet::FernetError",
              "kind": "enum_item",
              "signature": "pub enum FernetError {\n    /// Invalid key size\n    #[error(\"invalid key size: expected 32 bytes, got {0}\")]\n    InvalidKeySize(usize),\n\n    /// Invalid token format\n    #[error(\"invalid token format: {0}\")]\n    InvalidToken(String),\n\n    /// Token expired\n    #[error(\"token expired: age {0} seconds exceeds max {1} seconds\")]\n    TokenExpired(u64, u64),\n\n    /// Base64 decoding error\n    #[error(\"base64 decode error: {0}\")]\n    Base64Error(String),\n\n    /// Encryption error\n    #[error(\"encryption error: {0}\")]\n    Encryption(#[from] EncryptionError),\n\n    /// System time error\n    #[error(\"system time error: {0}\")]\n    SystemTime(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 49
            },
            {
              "name": "fernet::Fernet",
              "kind": "struct_item",
              "signature": "pub struct Fernet {\n\n}",
              "docs": "",
              "attributes": "#[derive(ZeroizeOnDrop)]",
              "line": 77
            },
            {
              "name": "fernet::Fernet::new",
              "kind": "function_item",
              "signature": "pub fn new(key: &[u8]) -> Result<Self, FernetError>;",
              "docs": "",
              "attributes": "",
              "line": 100
            },
            {
              "name": "fernet::Fernet::encrypt",
              "kind": "function_item",
              "signature": "pub fn encrypt(&self, data: &[u8]) -> Result<FernetToken, FernetError>;",
              "docs": "",
              "attributes": "",
              "line": 125
            },
            {
              "name": "fernet::Fernet::encrypt_at_time",
              "kind": "function_item",
              "signature": "pub fn encrypt_at_time(&self, data: &[u8], timestamp: u64) -> Result<FernetToken, FernetError>;",
              "docs": "",
              "attributes": "",
              "line": 136
            },
            {
              "name": "fernet::Fernet::decrypt",
              "kind": "function_item",
              "signature": "pub fn decrypt(&self, token: &FernetToken, ttl: Option<u64>) -> Result<Vec<u8>, FernetError>;",
              "docs": "",
              "attributes": "",
              "line": 183
            },
            {
              "name": "fernet::FernetToken",
              "kind": "struct_item",
              "signature": "pub struct FernetToken {\n\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Debug)]",
              "line": 244
            },
            {
              "name": "fernet::FernetToken::from_string",
              "kind": "function_item",
              "signature": "pub fn from_string(s: &str) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 250
            },
            {
              "name": "fernet::FernetToken::to_string",
              "kind": "function_item",
              "signature": "pub fn to_string(&self) -> String;",
              "docs": "",
              "attributes": "",
              "line": 257
            },
            {
              "name": "fernet::FernetToken::as_bytes",
              "kind": "function_item",
              "signature": "pub fn as_bytes(&self) -> &[u8];",
              "docs": "",
              "attributes": "",
              "line": 262
            }
          ],
          "parseErrors": false
        },
        {
          "module": "hkdf",
          "source": "sigil/weave/filament/filament-crypto/src/hkdf.rs",
          "sha256": "e763c07c542b7c51ca20d44beafcdc159d2ef7a77b6b934a5a50e3e5f13cabbc",
          "attributes": "",
          "items": [
            {
              "name": "hkdf::HkdfError",
              "kind": "enum_item",
              "signature": "pub enum HkdfError {\n    /// Output length too large\n    #[error(\"output length too large: maximum 8160 bytes (255 * 32), requested {0}\")]\n    OutputTooLarge(usize),\n\n    /// Key derivation failed\n    #[error(\"key derivation failed: {0}\")]\n    DerivationFailed(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 33
            },
            {
              "name": "hkdf::derive_key",
              "kind": "function_item",
              "signature": "pub fn derive_key(\n    ikm: &[u8],\n    salt: Option<&[u8]>,\n    info: &[u8],\n    output_len: usize,\n) -> Result<Vec<u8>, HkdfError>;",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "hkdf::derive_link_keys",
              "kind": "function_item",
              "signature": "pub fn derive_link_keys(\n    shared_secret: &[u8],\n    link_id: &[u8],\n) -> Result<([u8; 32], [u8; 32]), HkdfError>;",
              "docs": "",
              "attributes": "",
              "line": 117
            },
            {
              "name": "hkdf::derive_packet_key",
              "kind": "function_item",
              "signature": "pub fn derive_packet_key(session_key: &[u8], packet_nonce: u64) -> Result<[u8; 32], HkdfError>;",
              "docs": "",
              "attributes": "",
              "line": 151
            }
          ],
          "parseErrors": false
        },
        {
          "module": "identity",
          "source": "sigil/weave/filament/filament-crypto/src/identity.rs",
          "sha256": "ce1b6750f8c075043174dd9f7a462206465eb4337b5cd340f919fc25a7caf8d9",
          "attributes": "",
          "items": [
            {
              "name": "identity::IdentityError",
              "kind": "enum_item",
              "signature": "pub enum IdentityError {\n    /// Key generation failed\n    #[error(\"key generation failed: {0}\")]\n    KeyGeneration(String),\n\n    /// Signature verification failed\n    #[error(\"signature verification failed\")]\n    InvalidSignature,\n\n    /// Invalid key material\n    #[error(\"invalid key material: {0}\")]\n    InvalidKey(String),\n\n    /// Serialization/deserialization error\n    #[error(\"serialization error: {0}\")]\n    Serialization(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 50
            },
            {
              "name": "identity::Identity",
              "kind": "struct_item",
              "signature": "pub struct Identity {\n\n}",
              "docs": "",
              "attributes": "#[derive(ZeroizeOnDrop)]",
              "line": 73
            },
            {
              "name": "identity::Identity::generate",
              "kind": "function_item",
              "signature": "pub fn generate() -> Result<Self, IdentityError>;",
              "docs": "",
              "attributes": "",
              "line": 101
            },
            {
              "name": "identity::Identity::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(\n        mut signing_key_bytes: [u8; 32],\n        mut encryption_key_bytes: [u8; 32],\n    ) -> Result<Self, IdentityError>;",
              "docs": "",
              "attributes": "",
              "line": 139
            },
            {
              "name": "identity::Identity::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> ([u8; 32], [u8; 32]);",
              "docs": "",
              "attributes": "",
              "line": 168
            },
            {
              "name": "identity::Identity::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> [u8; 16];",
              "docs": "",
              "attributes": "#[inline]",
              "line": 178
            },
            {
              "name": "identity::Identity::verifying_key",
              "kind": "function_item",
              "signature": "pub fn verifying_key(&self) -> VerifyingKey;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 184
            },
            {
              "name": "identity::Identity::encryption_public_key",
              "kind": "function_item",
              "signature": "pub fn encryption_public_key(&self) -> X25519PublicKey;",
              "docs": "",
              "attributes": "#[inline]",
              "line": 190
            },
            {
              "name": "identity::Identity::sign",
              "kind": "function_item",
              "signature": "pub fn sign(&self, message: &[u8]) -> [u8; 64];",
              "docs": "",
              "attributes": "",
              "line": 211
            },
            {
              "name": "identity::Identity::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, message: &[u8], signature: &[u8; 64]) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 232
            },
            {
              "name": "identity::Identity::key_exchange",
              "kind": "function_item",
              "signature": "pub fn key_exchange(&self, their_public: X25519PublicKey) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 262
            },
            {
              "name": "identity::Identity::public_identity",
              "kind": "function_item",
              "signature": "pub fn public_identity(&self) -> PublicIdentity;",
              "docs": "",
              "attributes": "",
              "line": 267
            },
            {
              "name": "identity::PublicIdentity",
              "kind": "struct_item",
              "signature": "pub struct PublicIdentity {\n/// Ed25519 verification key\n\npub verifying_key: VerifyingKey,\n/// X25519 public key\n\npub encryption_key: X25519PublicKey,\n/// Identity hash (16 bytes)\n\npub identity_hash: [u8; 16]\n}",
              "docs": "",
              "attributes": "#[derive(Clone, Copy, Debug)]",
              "line": 294
            },
            {
              "name": "identity::PublicIdentity::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(\n        verifying_key: &[u8; 32],\n        encryption_key: &[u8; 32],\n    ) -> Result<Self, IdentityError>;",
              "docs": "",
              "attributes": "",
              "line": 305
            },
            {
              "name": "identity::PublicIdentity::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> [u8; 16];",
              "docs": "",
              "attributes": "#[inline]",
              "line": 326
            },
            {
              "name": "identity::PublicIdentity::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, message: &[u8], signature: &[u8; 64]) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 331
            },
            {
              "name": "identity::PublicIdentity::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> ([u8; 32], [u8; 32]);",
              "docs": "",
              "attributes": "",
              "line": 337
            }
          ],
          "parseErrors": false
        },
        {
          "module": "primitives",
          "source": "sigil/weave/filament/filament-crypto/src/primitives.rs",
          "sha256": "e6269a15e10811f6e7a3d88f34c2ed8db03082a98abc76894fd5be1919ae1091",
          "attributes": "",
          "items": [
            {
              "name": "primitives::sha256",
              "kind": "function_item",
              "signature": "pub fn sha256(data: &[u8]) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 29
            },
            {
              "name": "primitives::sha512",
              "kind": "function_item",
              "signature": "pub fn sha512(data: &[u8]) -> [u8; 64];",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "primitives::hmac_sha256",
              "kind": "function_item",
              "signature": "pub fn hmac_sha256(key: &[u8], data: &[u8]) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "primitives::verify_hmac_sha256",
              "kind": "function_item",
              "signature": "pub fn verify_hmac_sha256(key: &[u8], data: &[u8], expected_mac: &[u8; 32]) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 99
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": []
    },
    {
      "name": "filament-transport",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-transport",
      "manifestSha256": "6226ef7084139af9d06330af7e9a9286edc1b194aafaf657f5bd401a7b4fb749",
      "features": {},
      "publish": true,
      "url": "/reference/filament/filament-transport",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-transport/src/lib.rs",
          "sha256": "8b7dc81773c6376f8987ec16e4450d513063976f910efd7e54782d3e996b606e",
          "attributes": "",
          "items": [
            {
              "name": "announce",
              "kind": "module",
              "signature": "pub mod announce;",
              "docs": "",
              "attributes": "",
              "line": 39
            },
            {
              "name": "bandwidth",
              "kind": "module",
              "signature": "pub mod bandwidth;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 41
            },
            {
              "name": "forwarding",
              "kind": "module",
              "signature": "pub mod forwarding;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "modes",
              "kind": "module",
              "signature": "pub mod modes;",
              "docs": "",
              "attributes": "",
              "line": 43
            },
            {
              "name": "path_discovery",
              "kind": "module",
              "signature": "pub mod path_discovery;",
              "docs": "",
              "attributes": "",
              "line": 44
            },
            {
              "name": "routing_table",
              "kind": "module",
              "signature": "pub mod routing_table;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "types",
              "kind": "module",
              "signature": "pub mod types;",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "pub use announce::{Announce, AnnounceManager, AnnounceQueue};",
              "kind": "use_declaration",
              "signature": "pub use announce::{Announce, AnnounceManager, AnnounceQueue};",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "pub use bandwidth::BandwidthManager;",
              "kind": "use_declaration",
              "signature": "pub use bandwidth::BandwidthManager;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "pub use error::{Result, TransportError};",
              "kind": "use_declaration",
              "signature": "pub use error::{Result, TransportError};",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "pub use forwarding::{ForwardingEngine, HopInfo};",
              "kind": "use_declaration",
              "signature": "pub use forwarding::{ForwardingEngine, HopInfo};",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "pub use modes::InterfaceMode;",
              "kind": "use_declaration",
              "signature": "pub use modes::InterfaceMode;",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "pub use path_discovery::{PathDiscovery, PathRequest, PathResponse};",
              "kind": "use_declaration",
              "signature": "pub use path_discovery::{PathDiscovery, PathRequest, PathResponse};",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "pub use routing_table::{PathEntry, RoutingTable};",
              "kind": "use_declaration",
              "signature": "pub use routing_table::{PathEntry, RoutingTable};",
              "docs": "",
              "attributes": "",
              "line": 55
            },
            {
              "name": "pub use types::{DestinationHash, InterfaceId, LinkId};",
              "kind": "use_declaration",
              "signature": "pub use types::{DestinationHash, InterfaceId, LinkId};",
              "docs": "",
              "attributes": "",
              "line": 56
            }
          ],
          "parseErrors": false
        },
        {
          "module": "announce",
          "source": "sigil/weave/filament/filament-transport/src/announce.rs",
          "sha256": "f03df3e8bf007c7bcc77b6773b7cdb1ab018b3211bb97de39aa48600f7da4976",
          "attributes": "",
          "items": [
            {
              "name": "announce::Announce",
              "kind": "struct_item",
              "signature": "pub struct Announce {\n/// Destination hash being announced.\n\npub destination_hash: DestinationHash,\n/// Ed25519 public key (32 bytes).\n\npub public_key: [u8; 32],\n/// Optional application-specific data.\n\npub app_data: Option<Vec<u8>>,\n/// Random blob for uniqueness (16 bytes).\n\npub random_blob: [u8; 16],\n/// Ed25519 signature (64 bytes).\n\npub signature: [u8; 64],\n/// Number of hops traversed.\n\npub hops: u8\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 21
            },
            {
              "name": "announce::Announce::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        destination_hash: DestinationHash,\n        public_key: [u8; 32],\n        app_data: Option<Vec<u8>>,\n        random_blob: [u8; 16],\n        signature: [u8; 64],\n    ) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 44
            },
            {
              "name": "announce::Announce::increment_hops",
              "kind": "function_item",
              "signature": "pub fn increment_hops(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "announce::Announce::size",
              "kind": "function_item",
              "signature": "pub fn size(&self) -> usize;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 68
            },
            {
              "name": "announce::Announce::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 77
            },
            {
              "name": "announce::AnnounceQueue",
              "kind": "struct_item",
              "signature": "pub struct AnnounceQueue {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 124
            },
            {
              "name": "announce::AnnounceQueue::new",
              "kind": "function_item",
              "signature": "pub fn new(max_size: usize) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 132
            },
            {
              "name": "announce::AnnounceQueue::push",
              "kind": "function_item",
              "signature": "pub fn push(&mut self, announce: Announce) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 144
            },
            {
              "name": "announce::AnnounceQueue::pop",
              "kind": "function_item",
              "signature": "pub fn pop(&mut self) -> Option<Announce>;",
              "docs": "",
              "attributes": "",
              "line": 164
            },
            {
              "name": "announce::AnnounceQueue::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 170
            },
            {
              "name": "announce::AnnounceQueue::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 176
            },
            {
              "name": "announce::AnnounceQueue::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 181
            },
            {
              "name": "announce::AnnounceManager",
              "kind": "struct_item",
              "signature": "pub struct AnnounceManager {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 193
            },
            {
              "name": "announce::AnnounceManager::new",
              "kind": "function_item",
              "signature": "pub fn new(bandwidth_cap: f64) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 217
            },
            {
              "name": "announce::AnnounceManager::process_announce",
              "kind": "function_item",
              "signature": "pub async fn process_announce(&self, mut announce: Announce) -> Result<bool>;",
              "docs": "",
              "attributes": "",
              "line": 234
            },
            {
              "name": "announce::AnnounceManager::next_announce",
              "kind": "function_item",
              "signature": "pub async fn next_announce(\n        &self,\n        interface_bitrate: u64,\n        elapsed: Duration,\n    ) -> Option<Announce>;",
              "docs": "",
              "attributes": "",
              "line": 298
            },
            {
              "name": "announce::AnnounceManager::cleanup_cache",
              "kind": "function_item",
              "signature": "pub async fn cleanup_cache(&self);",
              "docs": "",
              "attributes": "",
              "line": 327
            },
            {
              "name": "announce::AnnounceManager::queue_len",
              "kind": "function_item",
              "signature": "pub async fn queue_len(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 337
            },
            {
              "name": "announce::AnnounceManager::set_max_hops",
              "kind": "function_item",
              "signature": "pub fn set_max_hops(&mut self, max_hops: u8);",
              "docs": "",
              "attributes": "",
              "line": 342
            }
          ],
          "parseErrors": false
        },
        {
          "module": "bandwidth",
          "source": "sigil/weave/filament/filament-transport/src/bandwidth.rs",
          "sha256": "a1d7fb3908c094bec51b7f74d7fa2c58ebcfe2cc6b893e1c2bd373947fc1ff12",
          "attributes": "",
          "items": [
            {
              "name": "bandwidth::BandwidthManager",
              "kind": "struct_item",
              "signature": "pub struct BandwidthManager {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "bandwidth::BandwidthManager::new",
              "kind": "function_item",
              "signature": "pub fn new(cap: f64) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 33
            },
            {
              "name": "bandwidth::BandwidthManager::can_send",
              "kind": "function_item",
              "signature": "pub fn can_send(&mut self, size: usize, interface_bitrate: u64) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "bandwidth::BandwidthManager::record_sent",
              "kind": "function_item",
              "signature": "pub fn record_sent(&mut self, size: usize);",
              "docs": "",
              "attributes": "",
              "line": 85
            },
            {
              "name": "bandwidth::BandwidthManager::utilization",
              "kind": "function_item",
              "signature": "pub fn utilization(&self) -> f64;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 92
            },
            {
              "name": "bandwidth::BandwidthManager::total_bytes",
              "kind": "function_item",
              "signature": "pub fn total_bytes(&self) -> u64;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 102
            },
            {
              "name": "bandwidth::BandwidthManager::reset",
              "kind": "function_item",
              "signature": "pub fn reset(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 107
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/filament/filament-transport/src/error.rs",
          "sha256": "ef8b0f5b15548540f44076894abd48b73e18c7d976bf812936c2858a8eb63013",
          "attributes": "",
          "items": [
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, TransportError>;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "error::TransportError",
              "kind": "enum_item",
              "signature": "pub enum TransportError {\n    /// Path not found for destination.\n    #[error(\"Path not found for destination {0}\")]\n    PathNotFound(String),\n\n    /// Routing table is full.\n    #[error(\"Routing table is full (max entries: {0})\")]\n    RoutingTableFull(usize),\n\n    /// Invalid hop count.\n    #[error(\"Invalid hop count: {0}\")]\n    InvalidHopCount(u8),\n\n    /// Announce queue is full.\n    #[error(\"Announce queue is full\")]\n    AnnounceQueueFull,\n\n    /// Bandwidth limit exceeded.\n    #[error(\"Bandwidth limit exceeded\")]\n    BandwidthLimitExceeded,\n\n    /// Loop detected in routing.\n    #[error(\"Loop detected: packet has visited this node before\")]\n    LoopDetected,\n\n    /// TTL expired.\n    #[error(\"TTL expired (hop count reached 0)\")]\n    TtlExpired,\n\n    /// Invalid interface mode.\n    #[error(\"Invalid interface mode: {0}\")]\n    InvalidInterfaceMode(String),\n\n    /// Path expired.\n    #[error(\"Path expired\")]\n    PathExpired,\n\n    /// Serialization error.\n    #[error(\"Serialization error: {0}\")]\n    SerializationError(#[from] bincode::Error),\n\n    /// I/O error.\n    #[error(\"I/O error: {0}\")]\n    IoError(#[from] std::io::Error),\n\n    /// Generic error.\n    #[error(\"{0}\")]\n    Other(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 10
            }
          ],
          "parseErrors": false
        },
        {
          "module": "forwarding",
          "source": "sigil/weave/filament/filament-transport/src/forwarding.rs",
          "sha256": "9514181d221092f4cf3ccaa35017a41cedc1e436fb17221e71f7807b462cdfc1",
          "attributes": "",
          "items": [
            {
              "name": "forwarding::HopInfo",
              "kind": "struct_item",
              "signature": "pub struct HopInfo {\n/// Destination the packet is heading to.\n\npub destination: DestinationHash,\n/// Current hop count.\n\npub hops: u8,\n/// Maximum hops allowed (TTL).\n\npub max_hops: u8,\n/// Packet hash for loop detection.\n\npub packet_hash: [u8; 32]\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 21
            },
            {
              "name": "forwarding::HopInfo::new",
              "kind": "function_item",
              "signature": "pub fn new(destination: DestinationHash, max_hops: u8, packet_hash: [u8; 32]) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 38
            },
            {
              "name": "forwarding::HopInfo::increment",
              "kind": "function_item",
              "signature": "pub fn increment(&mut self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 52
            },
            {
              "name": "forwarding::HopInfo::is_expired",
              "kind": "function_item",
              "signature": "pub fn is_expired(&self) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 62
            },
            {
              "name": "forwarding::HopInfo::remaining_hops",
              "kind": "function_item",
              "signature": "pub fn remaining_hops(&self) -> u8;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 68
            },
            {
              "name": "forwarding::ForwardingDecision",
              "kind": "enum_item",
              "signature": "pub enum ForwardingDecision {\n    /// Deliver locally (this is the destination).\n    Deliver,\n\n    /// Forward to next hop.\n    Forward {\n        /// Next hop destination.\n        next_hop: DestinationHash,\n        /// Interface to use.\n        interface: InterfaceId,\n        /// Updated hop info.\n        hop_info: HopInfo,\n    },\n\n    /// Drop the packet.\n    Drop(ForwardingDropReason),\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 128
            },
            {
              "name": "forwarding::ForwardingDropReason",
              "kind": "enum_item",
              "signature": "pub enum ForwardingDropReason {\n    /// TTL expired (hop count reached max).\n    TtlExpired,\n\n    /// Loop detected.\n    LoopDetected,\n\n    /// No path to destination.\n    NoPath,\n\n    /// Interface mode doesn't support transport.\n    TransportDisabled,\n\n    /// Invalid hop count.\n    InvalidHopCount,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 148
            },
            {
              "name": "forwarding::ForwardingEngine",
              "kind": "struct_item",
              "signature": "pub struct ForwardingEngine {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 178
            },
            {
              "name": "forwarding::ForwardingEngine::new",
              "kind": "function_item",
              "signature": "pub fn new(routing_table: Arc<RoutingTable>, interface_mode: InterfaceMode) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 195
            },
            {
              "name": "forwarding::ForwardingEngine::decide",
              "kind": "function_item",
              "signature": "pub async fn decide(\n        &self,\n        destination: DestinationHash,\n        mut hop_info: HopInfo,\n        is_local: bool,\n    ) -> ForwardingDecision;",
              "docs": "",
              "attributes": "",
              "line": 211
            },
            {
              "name": "forwarding::ForwardingEngine::cleanup",
              "kind": "function_item",
              "signature": "pub async fn cleanup(&self);",
              "docs": "",
              "attributes": "",
              "line": 272
            },
            {
              "name": "forwarding::ForwardingEngine::set_max_hops",
              "kind": "function_item",
              "signature": "pub fn set_max_hops(&mut self, max_hops: u8);",
              "docs": "",
              "attributes": "",
              "line": 278
            },
            {
              "name": "forwarding::ForwardingEngine::interface_mode",
              "kind": "function_item",
              "signature": "pub fn interface_mode(&self) -> InterfaceMode;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 284
            },
            {
              "name": "forwarding::ForwardingEngine::set_interface_mode",
              "kind": "function_item",
              "signature": "pub fn set_interface_mode(&mut self, mode: InterfaceMode);",
              "docs": "",
              "attributes": "",
              "line": 289
            }
          ],
          "parseErrors": false
        },
        {
          "module": "modes",
          "source": "sigil/weave/filament/filament-transport/src/modes.rs",
          "sha256": "ebcf9447f707cb9e24dd930990513b7b7a5cc99d031c9235def2800a8e24537f",
          "attributes": "",
          "items": [
            {
              "name": "modes::InterfaceMode",
              "kind": "enum_item",
              "signature": "pub enum InterfaceMode {\n    /// Full mode: All discovery, meshing, and transport functionality.\n    ///\n    /// Interfaces in this mode:\n    /// - Participate in peer discovery\n    /// - Forward announces according to propagation rules\n    /// - Maintain routing table entries\n    /// - Respond to path requests\n    Full,\n\n    /// Gateway mode: Full mode plus path discovery for downstream nodes.\n    ///\n    /// Additionally:\n    /// - Responds to path requests on behalf of downstream nodes\n    /// - Acts as entry/exit point for network segments\n    Gateway,\n\n    /// Access Point mode: Quiet until activity, short-lived paths.\n    ///\n    /// Characteristics:\n    /// - Doesn't actively announce presence\n    /// - Maintains shorter path expiry times\n    /// - Gateway-like discovery behavior\n    /// - Useful for mobile/temporary connections\n    AccessPoint,\n\n    /// Roaming mode: For mobile interfaces, faster path expiry.\n    ///\n    /// Characteristics:\n    /// - Faster path table entry expiration\n    /// - More frequent re-announcement\n    /// - Optimized for changing network topology\n    Roaming,\n\n    /// Boundary mode: Marks connections to significantly different network segments.\n    ///\n    /// Characteristics:\n    /// - Indicates crossing to different network domain\n    /// - May apply different routing policies\n    /// - Can limit announce propagation\n    Boundary,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "modes::InterfaceMode::supports_transport",
              "kind": "function_item",
              "signature": "pub const fn supports_transport(self) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 57
            },
            {
              "name": "modes::InterfaceMode::supports_discovery",
              "kind": "function_item",
              "signature": "pub const fn supports_discovery(self) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 63
            },
            {
              "name": "modes::InterfaceMode::path_expiry_multiplier",
              "kind": "function_item",
              "signature": "pub const fn path_expiry_multiplier(self) -> f32;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 74
            },
            {
              "name": "modes::InterfaceMode::is_gateway",
              "kind": "function_item",
              "signature": "pub const fn is_gateway(self) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 84
            }
          ],
          "parseErrors": false
        },
        {
          "module": "path_discovery",
          "source": "sigil/weave/filament/filament-transport/src/path_discovery.rs",
          "sha256": "f263c5317eda35023f5783f0fda357a2e110b490f4eccbf8d491740f2828cfe4",
          "attributes": "",
          "items": [
            {
              "name": "path_discovery::PathRequest",
              "kind": "struct_item",
              "signature": "pub struct PathRequest {\n/// Destination being queried.\n\npub destination: DestinationHash,\n/// Request ID for matching responses.\n\npub request_id: [u8; 16],\n/// Number of hops traversed.\n\npub hops: u8,\n/// Timestamp when request was created.\n\npub created_at: Instant\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 16
            },
            {
              "name": "path_discovery::PathRequest::new",
              "kind": "function_item",
              "signature": "pub fn new(destination: DestinationHash) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 33
            },
            {
              "name": "path_discovery::PathRequest::increment_hops",
              "kind": "function_item",
              "signature": "pub fn increment_hops(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "path_discovery::PathRequest::is_expired",
              "kind": "function_item",
              "signature": "pub fn is_expired(&self, timeout: Duration) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 52
            },
            {
              "name": "path_discovery::PathResponse",
              "kind": "struct_item",
              "signature": "pub struct PathResponse {\n/// Request ID this responds to.\n\npub request_id: [u8; 16],\n/// Destination from the request.\n\npub destination: DestinationHash,\n/// Number of hops to destination.\n\npub hops: u8,\n/// Interface to use for reaching destination.\n\npub interface: String,\n/// Next hop destination.\n\npub next_hop: DestinationHash,\n/// Timestamp when path was learned.\n\npub timestamp: Instant\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq)]",
              "line": 59
            },
            {
              "name": "path_discovery::PathResponse::from_path_entry",
              "kind": "function_item",
              "signature": "pub fn from_path_entry(request_id: [u8; 16], entry: &PathEntry) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 82
            },
            {
              "name": "path_discovery::PathDiscovery",
              "kind": "struct_item",
              "signature": "pub struct PathDiscovery {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 95
            },
            {
              "name": "path_discovery::PathDiscovery::new",
              "kind": "function_item",
              "signature": "pub fn new(routing_table: Arc<RoutingTable>) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 112
            },
            {
              "name": "path_discovery::PathDiscovery::request_path",
              "kind": "function_item",
              "signature": "pub async fn request_path(&self, destination: DestinationHash) -> Result<PathRequest>;",
              "docs": "",
              "attributes": "",
              "line": 126
            },
            {
              "name": "path_discovery::PathDiscovery::handle_request",
              "kind": "function_item",
              "signature": "pub async fn handle_request(&self, request: PathRequest) -> Option<PathResponse>;",
              "docs": "",
              "attributes": "",
              "line": 158
            },
            {
              "name": "path_discovery::PathDiscovery::handle_response",
              "kind": "function_item",
              "signature": "pub async fn handle_response(&self, response: PathResponse) -> Result<bool>;",
              "docs": "",
              "attributes": "",
              "line": 178
            },
            {
              "name": "path_discovery::PathDiscovery::cleanup_expired",
              "kind": "function_item",
              "signature": "pub async fn cleanup_expired(&self);",
              "docs": "",
              "attributes": "",
              "line": 218
            },
            {
              "name": "path_discovery::PathDiscovery::pending_count",
              "kind": "function_item",
              "signature": "pub async fn pending_count(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 233
            },
            {
              "name": "path_discovery::PathDiscovery::set_timeout",
              "kind": "function_item",
              "signature": "pub fn set_timeout(&mut self, timeout: Duration);",
              "docs": "",
              "attributes": "",
              "line": 238
            },
            {
              "name": "path_discovery::hex::encode",
              "kind": "function_item",
              "signature": "pub fn encode(bytes: impl AsRef<[u8]>) -> String;",
              "docs": "",
              "attributes": "",
              "line": 245
            }
          ],
          "parseErrors": false
        },
        {
          "module": "routing_table",
          "source": "sigil/weave/filament/filament-transport/src/routing_table.rs",
          "sha256": "8591f9ba896560032e3a81949f379e6644db7ef38b486be400fb5c12a512c52d",
          "attributes": "",
          "items": [
            {
              "name": "routing_table::PathEntry",
              "kind": "struct_item",
              "signature": "pub struct PathEntry {\n/// Destination hash this path leads to.\n\npub destination: DestinationHash,\n/// Next hop destination (intermediate node).\n\npub next_hop: DestinationHash,\n/// Number of hops to destination.\n\npub hops: u8,\n/// Interface this path uses.\n\npub interface: InterfaceId,\n/// When this path was learned.\n\npub timestamp: Instant,\n/// When this path expires.\n\npub expires_at: Instant,\n/// Interface mode when path was learned.\n\npub interface_mode: InterfaceMode,\n/// Round-trip time estimate (if available).\n\npub rtt: Option<Duration>,\n/// Number of successful packets sent via this path.\n\npub packets_sent: u64,\n/// Number of failed packets on this path.\n\npub packets_failed: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 21
            },
            {
              "name": "routing_table::PathEntry::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        destination: DestinationHash,\n        next_hop: DestinationHash,\n        hops: u8,\n        interface: InterfaceId,\n        interface_mode: InterfaceMode,\n    ) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 56
            },
            {
              "name": "routing_table::PathEntry::is_expired",
              "kind": "function_item",
              "signature": "pub fn is_expired(&self) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 99
            },
            {
              "name": "routing_table::PathEntry::remaining_lifetime",
              "kind": "function_item",
              "signature": "pub fn remaining_lifetime(&self) -> Option<Duration>;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 105
            },
            {
              "name": "routing_table::PathEntry::update_rtt",
              "kind": "function_item",
              "signature": "pub fn update_rtt(&mut self, rtt: Duration);",
              "docs": "",
              "attributes": "",
              "line": 115
            },
            {
              "name": "routing_table::PathEntry::record_success",
              "kind": "function_item",
              "signature": "pub fn record_success(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 130
            },
            {
              "name": "routing_table::PathEntry::record_failure",
              "kind": "function_item",
              "signature": "pub fn record_failure(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 135
            },
            {
              "name": "routing_table::PathEntry::success_rate",
              "kind": "function_item",
              "signature": "pub fn success_rate(&self) -> f64;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 141
            },
            {
              "name": "routing_table::RoutingStats",
              "kind": "struct_item",
              "signature": "pub struct RoutingStats {\n/// Total number of lookups.\n\npub lookups: AtomicU64,\n/// Number of successful lookups (path found).\n\npub hits: AtomicU64,\n/// Number of failed lookups (path not found).\n\npub misses: AtomicU64,\n/// Number of paths added.\n\npub paths_added: AtomicU64,\n/// Number of paths removed.\n\npub paths_removed: AtomicU64,\n/// Number of paths expired.\n\npub paths_expired: AtomicU64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Default)]",
              "line": 153
            },
            {
              "name": "routing_table::RoutingStats::new",
              "kind": "function_item",
              "signature": "pub const fn new() -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 171
            },
            {
              "name": "routing_table::RoutingStats::hit_rate",
              "kind": "function_item",
              "signature": "pub fn hit_rate(&self) -> f64;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 184
            },
            {
              "name": "routing_table::RoutingTable",
              "kind": "struct_item",
              "signature": "pub struct RoutingTable {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 202
            },
            {
              "name": "routing_table::RoutingTable::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 216
            },
            {
              "name": "routing_table::RoutingTable::with_capacity",
              "kind": "function_item",
              "signature": "pub fn with_capacity(max_entries: usize) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 222
            },
            {
              "name": "routing_table::RoutingTable::lookup",
              "kind": "function_item",
              "signature": "pub fn lookup(&self, destination: &DestinationHash) -> Option<PathEntry>;",
              "docs": "",
              "attributes": "",
              "line": 236
            },
            {
              "name": "routing_table::RoutingTable::insert",
              "kind": "function_item",
              "signature": "pub fn insert(&self, entry: PathEntry) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 259
            },
            {
              "name": "routing_table::RoutingTable::remove",
              "kind": "function_item",
              "signature": "pub fn remove(&self, destination: &DestinationHash) -> Option<PathEntry>;",
              "docs": "",
              "attributes": "",
              "line": 282
            },
            {
              "name": "routing_table::RoutingTable::update_rtt",
              "kind": "function_item",
              "signature": "pub fn update_rtt(&self, destination: &DestinationHash, rtt: Duration);",
              "docs": "",
              "attributes": "",
              "line": 293
            },
            {
              "name": "routing_table::RoutingTable::record_success",
              "kind": "function_item",
              "signature": "pub fn record_success(&self, destination: &DestinationHash);",
              "docs": "",
              "attributes": "",
              "line": 300
            },
            {
              "name": "routing_table::RoutingTable::record_failure",
              "kind": "function_item",
              "signature": "pub fn record_failure(&self, destination: &DestinationHash);",
              "docs": "",
              "attributes": "",
              "line": 307
            },
            {
              "name": "routing_table::RoutingTable::len",
              "kind": "function_item",
              "signature": "pub fn len(&self) -> usize;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 315
            },
            {
              "name": "routing_table::RoutingTable::is_empty",
              "kind": "function_item",
              "signature": "pub fn is_empty(&self) -> bool;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 321
            },
            {
              "name": "routing_table::RoutingTable::capacity",
              "kind": "function_item",
              "signature": "pub fn capacity(&self) -> usize;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 327
            },
            {
              "name": "routing_table::RoutingTable::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> &RoutingStats;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 333
            },
            {
              "name": "routing_table::RoutingTable::cleanup_expired",
              "kind": "function_item",
              "signature": "pub fn cleanup_expired(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 340
            },
            {
              "name": "routing_table::RoutingTable::paths_for_interface",
              "kind": "function_item",
              "signature": "pub fn paths_for_interface(&self, interface: &InterfaceId) -> Vec<PathEntry>;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 368
            },
            {
              "name": "routing_table::RoutingTable::clear",
              "kind": "function_item",
              "signature": "pub fn clear(&self);",
              "docs": "",
              "attributes": "",
              "line": 377
            },
            {
              "name": "routing_table::RoutingTable::memory_usage",
              "kind": "function_item",
              "signature": "pub fn memory_usage(&self) -> usize;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 387
            }
          ],
          "parseErrors": false
        },
        {
          "module": "types",
          "source": "sigil/weave/filament/filament-transport/src/types.rs",
          "sha256": "1f5cffa360e8c3402018fd4435ceb1b68be6f61214b5abfeb054440e7d227840",
          "attributes": "",
          "items": [
            {
              "name": "types::DestinationHash",
              "kind": "struct_item",
              "signature": "pub struct DestinationHash(pub [u8; 16]);",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 11
            },
            {
              "name": "types::DestinationHash::new",
              "kind": "function_item",
              "signature": "pub const fn new(bytes: [u8; 16]) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 16
            },
            {
              "name": "types::DestinationHash::as_bytes",
              "kind": "function_item",
              "signature": "pub const fn as_bytes(&self) -> &[u8; 16];",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 22
            },
            {
              "name": "types::DestinationHash::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 28
            },
            {
              "name": "types::DestinationHash::from_hex",
              "kind": "function_item",
              "signature": "pub fn from_hex(s: &str) -> Result<Self, hex::FromHexError>;",
              "docs": "",
              "attributes": "",
              "line": 37
            },
            {
              "name": "types::InterfaceId",
              "kind": "struct_item",
              "signature": "pub struct InterfaceId(String);",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 66
            },
            {
              "name": "types::InterfaceId::new",
              "kind": "function_item",
              "signature": "pub fn new(name: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 71
            },
            {
              "name": "types::InterfaceId::as_str",
              "kind": "function_item",
              "signature": "pub fn as_str(&self) -> &str;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 77
            },
            {
              "name": "types::LinkId",
              "kind": "struct_item",
              "signature": "pub struct LinkId(pub [u8; 16]);",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]",
              "line": 102
            },
            {
              "name": "types::LinkId::new",
              "kind": "function_item",
              "signature": "pub const fn new(bytes: [u8; 16]) -> Self;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 107
            },
            {
              "name": "types::LinkId::as_bytes",
              "kind": "function_item",
              "signature": "pub const fn as_bytes(&self) -> &[u8; 16];",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 113
            },
            {
              "name": "types::LinkId::to_hex",
              "kind": "function_item",
              "signature": "pub fn to_hex(&self) -> String;",
              "docs": "",
              "attributes": "#[must_use]",
              "line": 119
            },
            {
              "name": "types::hex::FromHexError",
              "kind": "enum_item",
              "signature": "pub enum FromHexError {\n        InvalidHexCharacter { c: char, index: usize },\n        InvalidStringLength,\n    }",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 135
            },
            {
              "name": "types::hex::encode",
              "kind": "function_item",
              "signature": "pub fn encode(bytes: impl AsRef<[u8]>) -> String;",
              "docs": "",
              "attributes": "",
              "line": 153
            },
            {
              "name": "types::hex::decode",
              "kind": "function_item",
              "signature": "pub fn decode(s: &str) -> Result<Vec<u8>, FromHexError>;",
              "docs": "",
              "attributes": "",
              "line": 161
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": []
    },
    {
      "name": "filament-link",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-link",
      "manifestSha256": "7fc510604f72845ceff902639c17fd79265bc4bfceaf522bde94feb92f31d1f1",
      "features": {
        "default": [],
        "std": []
      },
      "publish": true,
      "url": "/reference/filament/filament-link",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-link/src/lib.rs",
          "sha256": "23acf755a1ce0cae98741c81feee58391cc2a4184ce52d7b7a394132644635bb",
          "attributes": "",
          "items": [
            {
              "name": "channel",
              "kind": "module",
              "signature": "pub mod channel;",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "error",
              "kind": "module",
              "signature": "pub mod error;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "identity",
              "kind": "module",
              "signature": "pub mod identity;",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "keepalive",
              "kind": "module",
              "signature": "pub mod keepalive;",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "link",
              "kind": "module",
              "signature": "pub mod link;",
              "docs": "",
              "attributes": "",
              "line": 68
            },
            {
              "name": "proof",
              "kind": "module",
              "signature": "pub mod proof;",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "request",
              "kind": "module",
              "signature": "pub mod request;",
              "docs": "",
              "attributes": "",
              "line": 70
            },
            {
              "name": "resource",
              "kind": "module",
              "signature": "pub mod resource;",
              "docs": "",
              "attributes": "",
              "line": 71
            },
            {
              "name": "state",
              "kind": "module",
              "signature": "pub mod state;",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "pub use channel::{Channel, ChannelMessage};",
              "kind": "use_declaration",
              "signature": "pub use channel::{Channel, ChannelMessage};",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "pub use error::{LinkError, Result};",
              "kind": "use_declaration",
              "signature": "pub use error::{LinkError, Result};",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "pub use identity::Identity;",
              "kind": "use_declaration",
              "signature": "pub use identity::Identity;",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "pub use keepalive::Keepalive;",
              "kind": "use_declaration",
              "signature": "pub use keepalive::Keepalive;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "pub use link::{Link, LinkId, LinkOptions};",
              "kind": "use_declaration",
              "signature": "pub use link::{Link, LinkId, LinkOptions};",
              "docs": "",
              "attributes": "",
              "line": 78
            },
            {
              "name": "pub use proof::LinkProof;",
              "kind": "use_declaration",
              "signature": "pub use proof::LinkProof;",
              "docs": "",
              "attributes": "",
              "line": 79
            },
            {
              "name": "pub use request::LinkRequest;",
              "kind": "use_declaration",
              "signature": "pub use request::LinkRequest;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "pub use resource::{Resource, ResourceOptions, ResourceProgress};",
              "kind": "use_declaration",
              "signature": "pub use resource::{Resource, ResourceOptions, ResourceProgress};",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "pub use state::{LinkState, LinkStatus};",
              "kind": "use_declaration",
              "signature": "pub use state::{LinkState, LinkStatus};",
              "docs": "",
              "attributes": "",
              "line": 82
            },
            {
              "name": "::DestinationHash",
              "kind": "type_item",
              "signature": "pub type DestinationHash = [u8; 16];",
              "docs": "",
              "attributes": "",
              "line": 85
            },
            {
              "name": "::HANDSHAKE_OVERHEAD",
              "kind": "const_item",
              "signature": "pub const HANDSHAKE_OVERHEAD: usize;",
              "docs": "",
              "attributes": "",
              "line": 88
            },
            {
              "name": "::LINK_PROOF_TIMEOUT",
              "kind": "const_item",
              "signature": "pub const LINK_PROOF_TIMEOUT: u64;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "::DEFAULT_KEEPALIVE_INTERVAL",
              "kind": "const_item",
              "signature": "pub const DEFAULT_KEEPALIVE_INTERVAL: u64;",
              "docs": "",
              "attributes": "",
              "line": 94
            },
            {
              "name": "::MAX_RETRANSMIT_ATTEMPTS",
              "kind": "const_item",
              "signature": "pub const MAX_RETRANSMIT_ATTEMPTS: u8;",
              "docs": "",
              "attributes": "",
              "line": 97
            },
            {
              "name": "::RETRANSMIT_TIMEOUT_MS",
              "kind": "const_item",
              "signature": "pub const RETRANSMIT_TIMEOUT_MS: u64;",
              "docs": "",
              "attributes": "",
              "line": 100
            }
          ],
          "parseErrors": false
        },
        {
          "module": "channel",
          "source": "sigil/weave/filament/filament-link/src/channel.rs",
          "sha256": "99127941c2f58e7de662cb16273144d27e043b8eca058c0f53b64957ef935c0c",
          "attributes": "",
          "items": [
            {
              "name": "channel::Channel",
              "kind": "struct_item",
              "signature": "pub struct Channel {\n\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 24
            },
            {
              "name": "channel::Channel::new",
              "kind": "function_item",
              "signature": "pub fn new(session_key: &[u8; 32], salt: Option<&[u8]>) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 47
            },
            {
              "name": "channel::Channel::encrypt",
              "kind": "function_item",
              "signature": "pub fn encrypt(&mut self, plaintext: &[u8]) -> Result<Vec<u8>>;",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "channel::Channel::decrypt",
              "kind": "function_item",
              "signature": "pub fn decrypt(&mut self, encrypted: &[u8]) -> Result<Vec<u8>>;",
              "docs": "",
              "attributes": "",
              "line": 122
            },
            {
              "name": "channel::Channel::tx_sequence",
              "kind": "function_item",
              "signature": "pub fn tx_sequence(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 168
            },
            {
              "name": "channel::Channel::rx_sequence",
              "kind": "function_item",
              "signature": "pub fn rx_sequence(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 173
            },
            {
              "name": "channel::Channel::reset_sequences",
              "kind": "function_item",
              "signature": "pub fn reset_sequences(&mut self);",
              "docs": "",
              "attributes": "#[doc(hidden)]",
              "line": 179
            },
            {
              "name": "channel::ChannelMessage",
              "kind": "struct_item",
              "signature": "pub struct ChannelMessage {\n/// Message payload\n\npub payload: Vec<u8>,\n/// Message sequence number\n\npub sequence: u64,\n/// Timestamp\n\npub timestamp: std::time::Instant\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 203
            },
            {
              "name": "channel::ChannelMessage::new",
              "kind": "function_item",
              "signature": "pub fn new(payload: Vec<u8>, sequence: u64) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 216
            },
            {
              "name": "channel::ChannelMessage::size",
              "kind": "function_item",
              "signature": "pub fn size(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 225
            },
            {
              "name": "channel::ChannelMessage::age",
              "kind": "function_item",
              "signature": "pub fn age(&self) -> std::time::Duration;",
              "docs": "",
              "attributes": "",
              "line": 230
            }
          ],
          "parseErrors": false
        },
        {
          "module": "error",
          "source": "sigil/weave/filament/filament-link/src/error.rs",
          "sha256": "858668f01d4cd6c39c1f5172a6b9f203be0ed851a370cf1b2189e5d1b598d089",
          "attributes": "",
          "items": [
            {
              "name": "error::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, LinkError>;",
              "docs": "",
              "attributes": "",
              "line": 6
            },
            {
              "name": "error::LinkError",
              "kind": "enum_item",
              "signature": "pub enum LinkError {\n    /// Link establishment failed\n    #[error(\"link establishment failed: {0}\")]\n    EstablishmentFailed(String),\n\n    /// Link proof verification failed\n    #[error(\"link proof verification failed: {0}\")]\n    ProofVerificationFailed(String),\n\n    /// Invalid link request\n    #[error(\"invalid link request: {0}\")]\n    InvalidRequest(String),\n\n    /// Invalid link proof\n    #[error(\"invalid link proof: {0}\")]\n    InvalidProof(String),\n\n    /// Cryptographic operation failed\n    #[error(\"cryptographic operation failed: {0}\")]\n    CryptoError(String),\n\n    /// Key derivation failed\n    #[error(\"key derivation failed: {0}\")]\n    KeyDerivationFailed(String),\n\n    /// Encryption failed\n    #[error(\"encryption failed: {0}\")]\n    EncryptionFailed(String),\n\n    /// Decryption failed\n    #[error(\"decryption failed: {0}\")]\n    DecryptionFailed(String),\n\n    /// HMAC verification failed\n    #[error(\"HMAC verification failed\")]\n    HmacVerificationFailed,\n\n    /// Signature verification failed\n    #[error(\"signature verification failed\")]\n    SignatureVerificationFailed,\n\n    /// Link timeout\n    #[error(\"link operation timed out after {0}s\")]\n    Timeout(u64),\n\n    /// Link not established\n    #[error(\"link not established\")]\n    NotEstablished,\n\n    /// Link already established\n    #[error(\"link already established\")]\n    AlreadyEstablished,\n\n    /// Link closed\n    #[error(\"link closed\")]\n    Closed,\n\n    /// Invalid link state\n    #[error(\"invalid link state: expected {expected}, got {actual}\")]\n    InvalidState {\n        /// Expected state\n        expected: String,\n        /// Actual state\n        actual: String,\n    },\n\n    /// Packet too large\n    #[error(\"packet size {size} exceeds MTU {mtu}\")]\n    PacketTooLarge {\n        /// Packet size\n        size: usize,\n        /// Maximum transmission unit\n        mtu: usize,\n    },\n\n    /// Invalid packet\n    #[error(\"invalid packet: {0}\")]\n    InvalidPacket(String),\n\n    /// Retransmission limit exceeded\n    #[error(\"retransmission limit exceeded ({0} attempts)\")]\n    RetransmitLimitExceeded(u8),\n\n    /// Resource transfer failed\n    #[error(\"resource transfer failed: {0}\")]\n    ResourceTransferFailed(String),\n\n    /// I/O error\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Serialization error\n    #[error(\"serialization error: {0}\")]\n    Serialization(String),\n\n    /// Channel error\n    #[error(\"channel error: {0}\")]\n    Channel(String),\n\n    /// Other error\n    #[error(\"error: {0}\")]\n    Other(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 10
            },
            {
              "name": "error::LinkError::is_recoverable",
              "kind": "function_item",
              "signature": "pub fn is_recoverable(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 116
            },
            {
              "name": "error::LinkError::is_auth_failure",
              "kind": "function_item",
              "signature": "pub fn is_auth_failure(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 127
            }
          ],
          "parseErrors": false
        },
        {
          "module": "identity",
          "source": "sigil/weave/filament/filament-link/src/identity.rs",
          "sha256": "e92254e1d86b91f2a3125f4826ff7e46cc67a781a0b6d6c7da268800aeba7cc8",
          "attributes": "",
          "items": [
            {
              "name": "identity::Identity",
              "kind": "struct_item",
              "signature": "pub struct Identity {\n\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 17
            },
            {
              "name": "identity::Identity::generate",
              "kind": "function_item",
              "signature": "pub fn generate() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 42
            },
            {
              "name": "identity::Identity::from_keys",
              "kind": "function_item",
              "signature": "pub fn from_keys(\n        signing_key_bytes: &[u8; 32],\n        encryption_key_bytes: &[u8; 32],\n    ) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "identity::Identity::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> DestinationHash;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "identity::Identity::verifying_key",
              "kind": "function_item",
              "signature": "pub fn verifying_key(&self) -> &VerifyingKey;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "identity::Identity::public_key",
              "kind": "function_item",
              "signature": "pub fn public_key(&self) -> &PublicKey;",
              "docs": "",
              "attributes": "",
              "line": 108
            },
            {
              "name": "identity::Identity::sign",
              "kind": "function_item",
              "signature": "pub fn sign(&self, message: &[u8]) -> [u8; 64];",
              "docs": "",
              "attributes": "",
              "line": 121
            },
            {
              "name": "identity::Identity::verify",
              "kind": "function_item",
              "signature": "pub fn verify(\n        message: &[u8],\n        signature: &[u8; 64],\n        verifying_key: &VerifyingKey,\n    ) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 133
            },
            {
              "name": "identity::Identity::key_exchange",
              "kind": "function_item",
              "signature": "pub fn key_exchange(&self, peer_public: &PublicKey) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 153
            },
            {
              "name": "identity::Identity::generate_ephemeral",
              "kind": "function_item",
              "signature": "pub fn generate_ephemeral() -> (EphemeralSecret, PublicKey);",
              "docs": "",
              "attributes": "",
              "line": 163
            },
            {
              "name": "identity::Identity::export_signing_key",
              "kind": "function_item",
              "signature": "pub fn export_signing_key(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 171
            },
            {
              "name": "identity::Identity::export_encryption_key",
              "kind": "function_item",
              "signature": "pub fn export_encryption_key(&self) -> [u8; 32];",
              "docs": "",
              "attributes": "",
              "line": 176
            },
            {
              "name": "identity::PublicIdentity",
              "kind": "struct_item",
              "signature": "pub struct PublicIdentity {\n/// Ed25519 verifying key\n\npub verifying_key: VerifyingKey,\n/// X25519 public key\n\npub public_key: PublicKey\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 193
            },
            {
              "name": "identity::PublicIdentity::from_identity",
              "kind": "function_item",
              "signature": "pub fn from_identity(identity: &Identity) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 203
            },
            {
              "name": "identity::PublicIdentity::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(verifying_key: &[u8; 32], public_key: &[u8; 32]) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 211
            },
            {
              "name": "identity::PublicIdentity::hash",
              "kind": "function_item",
              "signature": "pub fn hash(&self) -> DestinationHash;",
              "docs": "",
              "attributes": "",
              "line": 223
            },
            {
              "name": "identity::PublicIdentity::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, message: &[u8], signature: &[u8; 64]) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 235
            }
          ],
          "parseErrors": false
        },
        {
          "module": "keepalive",
          "source": "sigil/weave/filament/filament-link/src/keepalive.rs",
          "sha256": "550ccd9ce63498d3f315364a2d06a3ab4acf5f05e512f6df9b7ccea21e954a73",
          "attributes": "",
          "items": [
            {
              "name": "keepalive::Keepalive",
              "kind": "struct_item",
              "signature": "pub struct Keepalive {\n\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 17
            },
            {
              "name": "keepalive::Keepalive::DEFAULT_INTERVAL",
              "kind": "const_item",
              "signature": "pub const DEFAULT_INTERVAL: Duration;",
              "docs": "",
              "attributes": "",
              "line": 45
            },
            {
              "name": "keepalive::Keepalive::MIN_INTERVAL",
              "kind": "const_item",
              "signature": "pub const MIN_INTERVAL: Duration;",
              "docs": "",
              "attributes": "",
              "line": 48
            },
            {
              "name": "keepalive::Keepalive::DEFAULT_MAX_MISSED",
              "kind": "const_item",
              "signature": "pub const DEFAULT_MAX_MISSED: u64;",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "keepalive::Keepalive::PACKET_SIZE",
              "kind": "const_item",
              "signature": "pub const PACKET_SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "keepalive::Keepalive::new",
              "kind": "function_item",
              "signature": "pub fn new(link_id: LinkId, interval: Option<Duration>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "keepalive::Keepalive::is_due",
              "kind": "function_item",
              "signature": "pub fn is_due(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 85
            },
            {
              "name": "keepalive::Keepalive::mark_sent",
              "kind": "function_item",
              "signature": "pub fn mark_sent(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 93
            },
            {
              "name": "keepalive::Keepalive::mark_received",
              "kind": "function_item",
              "signature": "pub fn mark_received(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 99
            },
            {
              "name": "keepalive::Keepalive::is_alive",
              "kind": "function_item",
              "signature": "pub fn is_alive(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 106
            },
            {
              "name": "keepalive::Keepalive::is_dead",
              "kind": "function_item",
              "signature": "pub fn is_dead(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 118
            },
            {
              "name": "keepalive::Keepalive::time_until_next",
              "kind": "function_item",
              "signature": "pub fn time_until_next(&self) -> Duration;",
              "docs": "",
              "attributes": "",
              "line": 123
            },
            {
              "name": "keepalive::Keepalive::time_since_last_received",
              "kind": "function_item",
              "signature": "pub fn time_since_last_received(&self) -> Option<Duration>;",
              "docs": "",
              "attributes": "",
              "line": 138
            },
            {
              "name": "keepalive::Keepalive::bandwidth_overhead_bps",
              "kind": "function_item",
              "signature": "pub fn bandwidth_overhead_bps(&self) -> f64;",
              "docs": "",
              "attributes": "",
              "line": 143
            },
            {
              "name": "keepalive::Keepalive::stats",
              "kind": "function_item",
              "signature": "pub fn stats(&self) -> KeepaliveStats;",
              "docs": "",
              "attributes": "",
              "line": 150
            },
            {
              "name": "keepalive::Keepalive::update_missed",
              "kind": "function_item",
              "signature": "pub fn update_missed(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 162
            },
            {
              "name": "keepalive::Keepalive::link_id",
              "kind": "function_item",
              "signature": "pub fn link_id(&self) -> LinkId;",
              "docs": "",
              "attributes": "",
              "line": 172
            },
            {
              "name": "keepalive::Keepalive::interval",
              "kind": "function_item",
              "signature": "pub fn interval(&self) -> Duration;",
              "docs": "",
              "attributes": "",
              "line": 177
            },
            {
              "name": "keepalive::KeepaliveStats",
              "kind": "struct_item",
              "signature": "pub struct KeepaliveStats {\n/// Number of keepalives sent\n\npub sent_count: u64,\n/// Number of keepalives received\n\npub received_count: u64,\n/// Number of missed keepalives\n\npub missed_count: u64,\n/// Last keepalive sent timestamp\n\npub last_sent: Option<Instant>,\n/// Last keepalive received timestamp\n\npub last_received: Option<Instant>,\n/// Bandwidth overhead (bits per second)\n\npub bandwidth_bps: f64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 184
            }
          ],
          "parseErrors": false
        },
        {
          "module": "link",
          "source": "sigil/weave/filament/filament-link/src/link.rs",
          "sha256": "0f524251ac3f4525fbae01a4675bd8be986d31949a0abf5d555c7feb3bab43b3",
          "attributes": "",
          "items": [
            {
              "name": "link::LinkId",
              "kind": "type_item",
              "signature": "pub type LinkId = [u8; 16];",
              "docs": "",
              "attributes": "",
              "line": 22
            },
            {
              "name": "link::Link",
              "kind": "struct_item",
              "signature": "pub struct Link {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "link::LinkOptions",
              "kind": "struct_item",
              "signature": "pub struct LinkOptions {\n/// Configuration\n\npub config: LinkConfig,\n/// Enable keepalive\n\npub keepalive_enabled: bool,\n/// Request proof of delivery\n\npub request_proof: bool\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 74
            },
            {
              "name": "link::Link::establish",
              "kind": "function_item",
              "signature": "pub async fn establish(\n        identity: Identity,\n        destination: DestinationHash,\n        options: LinkOptions,\n    ) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 109
            },
            {
              "name": "link::Link::accept",
              "kind": "function_item",
              "signature": "pub async fn accept(\n        identity: Identity,\n        request: LinkRequest,\n        options: LinkOptions,\n    ) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 158
            },
            {
              "name": "link::Link::handle_proof",
              "kind": "function_item",
              "signature": "pub async fn handle_proof(\n        &self,\n        proof: LinkProof,\n        responder_identity: &PublicIdentity,\n    ) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 224
            },
            {
              "name": "link::Link::send",
              "kind": "function_item",
              "signature": "pub async fn send(&self, data: &[u8]) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 270
            },
            {
              "name": "link::Link::recv",
              "kind": "function_item",
              "signature": "pub async fn recv(&self) -> Result<Option<ChannelMessage>>;",
              "docs": "",
              "attributes": "",
              "line": 301
            },
            {
              "name": "link::Link::recv_timeout",
              "kind": "function_item",
              "signature": "pub async fn recv_timeout(&self, timeout: Duration) -> Result<Option<ChannelMessage>>;",
              "docs": "",
              "attributes": "",
              "line": 307
            },
            {
              "name": "link::Link::handle_data",
              "kind": "function_item",
              "signature": "pub async fn handle_data(&self, encrypted: &[u8]) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 321
            },
            {
              "name": "link::Link::is_active",
              "kind": "function_item",
              "signature": "pub async fn is_active(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 347
            },
            {
              "name": "link::Link::is_established",
              "kind": "function_item",
              "signature": "pub async fn is_established(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 352
            },
            {
              "name": "link::Link::id",
              "kind": "function_item",
              "signature": "pub fn id(&self) -> LinkId;",
              "docs": "",
              "attributes": "",
              "line": 357
            },
            {
              "name": "link::Link::remote_destination",
              "kind": "function_item",
              "signature": "pub fn remote_destination(&self) -> DestinationHash;",
              "docs": "",
              "attributes": "",
              "line": 362
            },
            {
              "name": "link::Link::state",
              "kind": "function_item",
              "signature": "pub async fn state(&self) -> LinkState;",
              "docs": "",
              "attributes": "",
              "line": 367
            },
            {
              "name": "link::Link::close",
              "kind": "function_item",
              "signature": "pub async fn close(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 372
            },
            {
              "name": "link::Link::keepalive_due",
              "kind": "function_item",
              "signature": "pub async fn keepalive_due(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 379
            },
            {
              "name": "link::Link::send_keepalive",
              "kind": "function_item",
              "signature": "pub async fn send_keepalive(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 384
            },
            {
              "name": "link::Link::is_alive",
              "kind": "function_item",
              "signature": "pub async fn is_alive(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 392
            },
            {
              "name": "link::Link::create_resource",
              "kind": "function_item",
              "signature": "pub fn create_resource(\n        &self,\n        size: u64,\n        options: crate::resource::ResourceOptions,\n    ) -> Resource;",
              "docs": "",
              "attributes": "",
              "line": 402
            }
          ],
          "parseErrors": false
        },
        {
          "module": "proof",
          "source": "sigil/weave/filament/filament-link/src/proof.rs",
          "sha256": "ceac3ce54a3d3bf23bb445ba34264979e3ebb74b3341385cd14b37f9775b8aaf",
          "attributes": "",
          "items": [
            {
              "name": "proof::LinkProof",
              "kind": "struct_item",
              "signature": "pub struct LinkProof {\n/// Link ID this proof responds to\n\npub link_id: LinkId,\n/// Responder's ephemeral encryption public key (X25519)\n\npub ephemeral_encryption_key: PublicKey,\n/// Responder's ephemeral signing public key (Ed25519)\n\npub ephemeral_signing_key: VerifyingKey,\n/// Ed25519 signature proving possession of responder's identity\n\npub signature: [u8; 64],\n/// Link context byte\n\npub context: u8\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 37
            },
            {
              "name": "proof::LinkProof::SIZE",
              "kind": "const_item",
              "signature": "pub const SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 56
            },
            {
              "name": "proof::LinkProof::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        link_id: LinkId,\n        identity: &Identity,\n        ephemeral_signing_secret: &SigningKey,\n    ) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "proof::LinkProof::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> [u8; Self::SIZE];",
              "docs": "",
              "attributes": "",
              "line": 93
            },
            {
              "name": "proof::LinkProof::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: &[u8]) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 120
            },
            {
              "name": "proof::LinkProof::verify",
              "kind": "function_item",
              "signature": "pub fn verify(\n        &self,\n        expected_link_id: &LinkId,\n        responder_verifying_key: &VerifyingKey,\n    ) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 172
            },
            {
              "name": "proof::LinkProof::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 200
            }
          ],
          "parseErrors": false
        },
        {
          "module": "request",
          "source": "sigil/weave/filament/filament-link/src/request.rs",
          "sha256": "d1c539a674111b408c543bd7dffb0addb17d517dc940596ee1bc7c209baad8d0",
          "attributes": "",
          "items": [
            {
              "name": "request::LinkRequest",
              "kind": "struct_item",
              "signature": "pub struct LinkRequest {\n/// Target destination hash\n\npub destination: DestinationHash,\n/// Initiator's ephemeral encryption public key (X25519)\n\npub ephemeral_encryption_key: PublicKey,\n/// Initiator's ephemeral signing public key (Ed25519)\n\npub ephemeral_signing_key: VerifyingKey,\n/// Link context byte\n\npub context: u8\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 33
            },
            {
              "name": "request::LinkRequest::SIZE",
              "kind": "const_item",
              "signature": "pub const SIZE: usize;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "request::LinkRequest::new",
              "kind": "function_item",
              "signature": "pub fn new(destination: DestinationHash, _identity: &Identity) -> (Self, LinkId);",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "request::LinkRequest::to_bytes",
              "kind": "function_item",
              "signature": "pub fn to_bytes(&self) -> [u8; Self::SIZE];",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "request::LinkRequest::from_bytes",
              "kind": "function_item",
              "signature": "pub fn from_bytes(bytes: &[u8]) -> Result<Self>;",
              "docs": "",
              "attributes": "",
              "line": 111
            },
            {
              "name": "request::LinkRequest::compute_link_id",
              "kind": "function_item",
              "signature": "pub fn compute_link_id(&self) -> LinkId;",
              "docs": "",
              "attributes": "",
              "line": 154
            },
            {
              "name": "request::LinkRequest::validate",
              "kind": "function_item",
              "signature": "pub fn validate(&self) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 165
            }
          ],
          "parseErrors": false
        },
        {
          "module": "resource",
          "source": "sigil/weave/filament/filament-link/src/resource.rs",
          "sha256": "9250d731fabb7cb5430e04f3f06f7d383b21e0512cc500672cba4cb701493c97",
          "attributes": "",
          "items": [
            {
              "name": "resource::ResourceOptions",
              "kind": "struct_item",
              "signature": "pub struct ResourceOptions {\n/// Chunk size for transfer (bytes)\n\npub chunk_size: usize,\n/// Enable compression\n\npub compress: bool,\n/// Request proof of delivery for each chunk\n\npub request_proof: bool,\n/// Maximum retries per chunk\n\npub max_retries: u8,\n/// Transfer timeout (seconds)\n\npub timeout_secs: u64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 14
            },
            {
              "name": "resource::ResourceProgress",
              "kind": "struct_item",
              "signature": "pub struct ResourceProgress {\n/// Total size in bytes\n\npub total_bytes: u64,\n/// Bytes transferred so far\n\npub bytes_sent: u64,\n/// Number of chunks\n\npub total_chunks: u64,\n/// Chunks transferred\n\npub chunks_sent: u64,\n/// Transfer speed (bytes/sec)\n\npub speed_bps: f64,\n/// Estimated time remaining (seconds)\n\npub eta_secs: f64\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 45
            },
            {
              "name": "resource::ResourceProgress::percent",
              "kind": "function_item",
              "signature": "pub fn percent(&self) -> f64;",
              "docs": "",
              "attributes": "",
              "line": 67
            },
            {
              "name": "resource::ResourceProgress::is_complete",
              "kind": "function_item",
              "signature": "pub fn is_complete(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "resource::Resource",
              "kind": "struct_item",
              "signature": "pub struct Resource {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "resource::Resource::new",
              "kind": "function_item",
              "signature": "pub fn new(total_size: u64, options: ResourceOptions) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "resource::Resource::total_chunks",
              "kind": "function_item",
              "signature": "pub fn total_chunks(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 129
            },
            {
              "name": "resource::Resource::send_chunk",
              "kind": "function_item",
              "signature": "pub async fn send_chunk(&self, chunk: &[u8], _chunk_index: u64) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 139
            },
            {
              "name": "resource::Resource::progress",
              "kind": "function_item",
              "signature": "pub fn progress(&self) -> Arc<Mutex<mpsc::UnboundedReceiver<ResourceProgress>>>;",
              "docs": "",
              "attributes": "",
              "line": 176
            },
            {
              "name": "resource::Resource::current_progress",
              "kind": "function_item",
              "signature": "pub async fn current_progress(&self) -> ResourceProgress;",
              "docs": "",
              "attributes": "",
              "line": 181
            },
            {
              "name": "resource::Resource::transfer",
              "kind": "function_item",
              "signature": "pub async fn transfer<R, F>(&self, mut reader: R, mut send_fn: F) -> Result<()>\n    where\n        R: Read,\n        F: FnMut(&[u8]) -> Result<()>,;",
              "docs": "",
              "attributes": "",
              "line": 213
            },
            {
              "name": "resource::Resource::receive",
              "kind": "function_item",
              "signature": "pub async fn receive<W, F>(&self, mut writer: W, mut recv_fn: F) -> Result<()>\n    where\n        W: Write,\n        F: FnMut() -> Result<Vec<u8>>,;",
              "docs": "",
              "attributes": "",
              "line": 270
            }
          ],
          "parseErrors": false
        },
        {
          "module": "state",
          "source": "sigil/weave/filament/filament-link/src/state.rs",
          "sha256": "e0038120ddd1b2d8b34101e91582c69725e7ea513e17c9cec7dda540a32746e2",
          "attributes": "",
          "items": [
            {
              "name": "state::LinkStatus",
              "kind": "enum_item",
              "signature": "pub enum LinkStatus {\n    /// Link request sent, awaiting proof\n    Pending,\n\n    /// Link proof received, awaiting confirmation\n    ProofReceived,\n\n    /// Link fully established and active\n    Active,\n\n    /// Link is stale (no activity)\n    Stale,\n\n    /// Link closed gracefully\n    Closed,\n\n    /// Link failed (error occurred)\n    Failed,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 12
            },
            {
              "name": "state::LinkState",
              "kind": "struct_item",
              "signature": "pub struct LinkState {\n/// Link ID\n\npub link_id: LinkId,\n/// Current status\n\npub status: LinkStatus,\n/// Creation timestamp\n\npub created_at: Instant,\n/// Last activity timestamp\n\npub last_activity: Instant,\n/// Initiator's ephemeral public key\n\npub initiator_ephemeral_key: Option<PublicKey>,\n/// Responder's ephemeral public key\n\npub responder_ephemeral_key: Option<PublicKey>,\n/// Shared session key (derived from ECDH)\n\npub session_key: Option<[u8; 32]>,\n/// Number of packets sent\n\npub packets_sent: u64,\n/// Number of packets received\n\npub packets_received: u64,\n/// Number of bytes sent\n\npub bytes_sent: u64,\n/// Number of bytes received\n\npub bytes_received: u64,\n/// Number of retransmissions\n\npub retransmissions: u64,\n/// Round-trip time estimate (milliseconds)\n\npub rtt_ms: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 47
            },
            {
              "name": "state::LinkState::new",
              "kind": "function_item",
              "signature": "pub fn new(link_id: LinkId) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 90
            },
            {
              "name": "state::LinkState::set_status",
              "kind": "function_item",
              "signature": "pub fn set_status(&mut self, status: LinkStatus);",
              "docs": "",
              "attributes": "",
              "line": 110
            },
            {
              "name": "state::LinkState::activate",
              "kind": "function_item",
              "signature": "pub fn activate(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 116
            },
            {
              "name": "state::LinkState::close",
              "kind": "function_item",
              "signature": "pub fn close(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 122
            },
            {
              "name": "state::LinkState::fail",
              "kind": "function_item",
              "signature": "pub fn fail(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 127
            },
            {
              "name": "state::LinkState::update_activity",
              "kind": "function_item",
              "signature": "pub fn update_activity(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 132
            },
            {
              "name": "state::LinkState::is_active",
              "kind": "function_item",
              "signature": "pub fn is_active(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 137
            },
            {
              "name": "state::LinkState::is_established",
              "kind": "function_item",
              "signature": "pub fn is_established(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 142
            },
            {
              "name": "state::LinkState::is_terminated",
              "kind": "function_item",
              "signature": "pub fn is_terminated(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 147
            },
            {
              "name": "state::LinkState::is_stale",
              "kind": "function_item",
              "signature": "pub fn is_stale(&self, timeout: Duration) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 152
            },
            {
              "name": "state::LinkState::age",
              "kind": "function_item",
              "signature": "pub fn age(&self) -> Duration;",
              "docs": "",
              "attributes": "",
              "line": 157
            },
            {
              "name": "state::LinkState::idle_time",
              "kind": "function_item",
              "signature": "pub fn idle_time(&self) -> Duration;",
              "docs": "",
              "attributes": "",
              "line": 162
            },
            {
              "name": "state::LinkState::record_sent",
              "kind": "function_item",
              "signature": "pub fn record_sent(&mut self, bytes: usize);",
              "docs": "",
              "attributes": "",
              "line": 167
            },
            {
              "name": "state::LinkState::record_received",
              "kind": "function_item",
              "signature": "pub fn record_received(&mut self, bytes: usize);",
              "docs": "",
              "attributes": "",
              "line": 174
            },
            {
              "name": "state::LinkState::record_retransmission",
              "kind": "function_item",
              "signature": "pub fn record_retransmission(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 181
            },
            {
              "name": "state::LinkState::update_rtt",
              "kind": "function_item",
              "signature": "pub fn update_rtt(&mut self, rtt_ms: u64);",
              "docs": "",
              "attributes": "",
              "line": 186
            },
            {
              "name": "state::LinkState::throughput",
              "kind": "function_item",
              "signature": "pub fn throughput(&self) -> f64;",
              "docs": "",
              "attributes": "",
              "line": 196
            },
            {
              "name": "state::LinkState::packet_loss_rate",
              "kind": "function_item",
              "signature": "pub fn packet_loss_rate(&self) -> f64;",
              "docs": "",
              "attributes": "",
              "line": 206
            },
            {
              "name": "state::LinkConfig",
              "kind": "struct_item",
              "signature": "pub struct LinkConfig {\n/// Maximum time to wait for link proof (seconds)\n\npub proof_timeout: Duration,\n/// Keepalive interval (seconds)\n\npub keepalive_interval: Duration,\n/// Stale timeout (seconds)\n\npub stale_timeout: Duration,\n/// Maximum retransmission attempts\n\npub max_retransmit_attempts: u8,\n/// Initial retransmission timeout (milliseconds)\n\npub retransmit_timeout: Duration,\n/// Maximum packet size (bytes)\n\npub max_packet_size: usize\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 218
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": []
    },
    {
      "name": "filament-interfaces",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-interfaces",
      "manifestSha256": "63204ff6cba1210a37553a3c06f9fe23c7e134f62dbefb8704dc6c7ee81b16e2",
      "features": {
        "default": [
          "serial",
          "serde"
        ],
        "serial": [
          "serialport"
        ],
        "full": [
          "serial",
          "serde"
        ]
      },
      "publish": true,
      "url": "/reference/filament/filament-interfaces",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-interfaces/src/lib.rs",
          "sha256": "32f0c6f4a4daa212cf1e3a7cb68745f0a8a99ea7de3f869bd883fad5405166c0",
          "attributes": "",
          "items": [
            {
              "name": "auto",
              "kind": "module",
              "signature": "pub mod auto;",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "ifac",
              "kind": "module",
              "signature": "pub mod ifac;",
              "docs": "",
              "attributes": "",
              "line": 61
            },
            {
              "name": "interface",
              "kind": "module",
              "signature": "pub mod interface;",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "manager",
              "kind": "module",
              "signature": "pub mod manager;",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "tcp_client",
              "kind": "module",
              "signature": "pub mod tcp_client;",
              "docs": "",
              "attributes": "",
              "line": 64
            },
            {
              "name": "tcp_server",
              "kind": "module",
              "signature": "pub mod tcp_server;",
              "docs": "",
              "attributes": "",
              "line": 65
            },
            {
              "name": "udp",
              "kind": "module",
              "signature": "pub mod udp;",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "serial",
              "kind": "module",
              "signature": "pub mod serial;",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]",
              "line": 69
            },
            {
              "name": "pub use auto::{AutoInterface, AutoInterfaceConfig};",
              "kind": "use_declaration",
              "signature": "pub use auto::{AutoInterface, AutoInterfaceConfig};",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "pub use ifac::{IFACConfig, IFAC};",
              "kind": "use_declaration",
              "signature": "pub use ifac::{IFACConfig, IFAC};",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "pub use interface::{Interface, InterfaceError, InterfaceId, InterfaceMode, InterfaceStats};",
              "kind": "use_declaration",
              "signature": "pub use interface::{Interface, InterfaceError, InterfaceId, InterfaceMode, InterfaceStats};",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "pub use manager::{InterfaceManager, InterfaceManagerError};",
              "kind": "use_declaration",
              "signature": "pub use manager::{InterfaceManager, InterfaceManagerError};",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "pub use tcp_client::{TCPClientConfig, TCPClientInterface};",
              "kind": "use_declaration",
              "signature": "pub use tcp_client::{TCPClientConfig, TCPClientInterface};",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "pub use tcp_server::{TCPServerConfig, TCPServerInterface};",
              "kind": "use_declaration",
              "signature": "pub use tcp_server::{TCPServerConfig, TCPServerInterface};",
              "docs": "",
              "attributes": "",
              "line": 77
            },
            {
              "name": "pub use udp::{UDPInterface, UDPInterfaceConfig};",
              "kind": "use_declaration",
              "signature": "pub use udp::{UDPInterface, UDPInterfaceConfig};",
              "docs": "",
              "attributes": "",
              "line": 78
            },
            {
              "name": "pub use serial::{SerialConfig, SerialInterface};",
              "kind": "use_declaration",
              "signature": "pub use serial::{SerialConfig, SerialInterface};",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]",
              "line": 81
            },
            {
              "name": "prelude",
              "kind": "module",
              "signature": "pub mod prelude;",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "pub use crate::{\n        AutoInterface, IFACConfig, Interface, InterfaceError, InterfaceId, InterfaceManager,\n        InterfaceMode, InterfaceStats, TCPClientInterface, TCPServerInterface, UDPInterface, IFAC,\n    };",
              "kind": "use_declaration",
              "signature": "pub use crate::{\n        AutoInterface, IFACConfig, Interface, InterfaceError, InterfaceId, InterfaceManager,\n        InterfaceMode, InterfaceStats, TCPClientInterface, TCPServerInterface, UDPInterface, IFAC,\n    };",
              "docs": "",
              "attributes": "",
              "line": 85
            },
            {
              "name": "pub use crate::SerialInterface;",
              "kind": "use_declaration",
              "signature": "pub use crate::SerialInterface;",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]",
              "line": 91
            }
          ],
          "parseErrors": false
        },
        {
          "module": "auto",
          "source": "sigil/weave/filament/filament-interfaces/src/auto.rs",
          "sha256": "829ce204e802c92adbc1c1ed34a0db689db8b94d52ec675967b2aba9b2cfae95",
          "attributes": "",
          "items": [
            {
              "name": "auto::DiscoveryScope",
              "kind": "enum_item",
              "signature": "pub enum DiscoveryScope {\n    /// Link-local scope (same physical network)\n    Link = 2,\n    /// Admin-local scope (administratively scoped)\n    Admin = 4,\n    /// Site-local scope (same site)\n    Site = 5,\n    /// Organization-local scope (same organization)\n    Organization = 8,\n    /// Global scope (Internet-wide)\n    Global = 14,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]",
              "line": 19
            },
            {
              "name": "auto::AutoInterfaceConfig",
              "kind": "struct_item",
              "signature": "pub struct AutoInterfaceConfig {\n/// Group ID for network isolation\n\npub group_id: String,\n/// Discovery scope\n\npub scope: DiscoveryScope,\n/// Data port for packet transmission\n\npub data_port: u16,\n/// Discovery port for peer discovery\n\npub discovery_port: u16,\n/// Interface mode\n\npub mode: InterfaceMode,\n/// Specific network devices to use (None = all)\n\npub devices: Option<Vec<String>>,\n/// Network devices to ignore\n\npub ignored_devices: Option<Vec<String>>,\n/// Peer discovery interval\n\npub discovery_interval: Duration,\n/// Optional IFAC authentication\n\npub ifac: Option<IFAC>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 40
            },
            {
              "name": "auto::AutoInterfaceBuilder",
              "kind": "struct_item",
              "signature": "pub struct AutoInterfaceBuilder {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 78
            },
            {
              "name": "auto::AutoInterfaceBuilder::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "auto::AutoInterfaceBuilder::group_id",
              "kind": "function_item",
              "signature": "pub fn group_id(mut self, group_id: impl Into<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "auto::AutoInterfaceBuilder::scope",
              "kind": "function_item",
              "signature": "pub fn scope(mut self, scope: DiscoveryScope) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 97
            },
            {
              "name": "auto::AutoInterfaceBuilder::data_port",
              "kind": "function_item",
              "signature": "pub fn data_port(mut self, port: u16) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "auto::AutoInterfaceBuilder::discovery_port",
              "kind": "function_item",
              "signature": "pub fn discovery_port(mut self, port: u16) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 109
            },
            {
              "name": "auto::AutoInterfaceBuilder::mode",
              "kind": "function_item",
              "signature": "pub fn mode(mut self, mode: InterfaceMode) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 115
            },
            {
              "name": "auto::AutoInterfaceBuilder::devices",
              "kind": "function_item",
              "signature": "pub fn devices(mut self, devices: Vec<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 121
            },
            {
              "name": "auto::AutoInterfaceBuilder::ignored_devices",
              "kind": "function_item",
              "signature": "pub fn ignored_devices(mut self, devices: Vec<String>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 127
            },
            {
              "name": "auto::AutoInterfaceBuilder::discovery_interval",
              "kind": "function_item",
              "signature": "pub fn discovery_interval(mut self, interval: Duration) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 133
            },
            {
              "name": "auto::AutoInterfaceBuilder::ifac",
              "kind": "function_item",
              "signature": "pub fn ifac(mut self, ifac: IFAC) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 139
            },
            {
              "name": "auto::AutoInterfaceBuilder::build",
              "kind": "function_item",
              "signature": "pub async fn build(self) -> Result<AutoInterface, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 145
            },
            {
              "name": "auto::AutoInterface",
              "kind": "struct_item",
              "signature": "pub struct AutoInterface {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 194
            },
            {
              "name": "auto::AutoInterface::new",
              "kind": "function_item",
              "signature": "pub async fn new(config: AutoInterfaceConfig) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 200
            },
            {
              "name": "auto::AutoInterface::builder",
              "kind": "function_item",
              "signature": "pub fn builder() -> AutoInterfaceBuilder;",
              "docs": "",
              "attributes": "",
              "line": 240
            },
            {
              "name": "auto::AutoInterface::discovered_peers",
              "kind": "function_item",
              "signature": "pub async fn discovered_peers(&self) -> Vec<SocketAddrV6>;",
              "docs": "",
              "attributes": "",
              "line": 415
            }
          ],
          "parseErrors": false
        },
        {
          "module": "ifac",
          "source": "sigil/weave/filament/filament-interfaces/src/ifac.rs",
          "sha256": "77eff297ae24451170b912467123ae3242a121e29a2ea5904da8494c1f1dd62f",
          "attributes": "",
          "items": [
            {
              "name": "ifac::IFACConfig",
              "kind": "struct_item",
              "signature": "pub struct IFACConfig {\n/// Network name (used for key derivation)\n\npub network_name: String,\n/// Passphrase for key derivation\n\npub passphrase: Option<String>,\n/// IFAC signature size in bits (8-512)\n\npub size_bits: usize\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 13
            },
            {
              "name": "ifac::IFACConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(\n        network_name: impl Into<String>,\n        passphrase: Option<String>,\n        size_bits: usize,\n    ) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 34
            },
            {
              "name": "ifac::IFACConfig::size_bytes",
              "kind": "function_item",
              "signature": "pub fn size_bytes(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 53
            },
            {
              "name": "ifac::IFACError",
              "kind": "enum_item",
              "signature": "pub enum IFACError {\n    /// Signature verification failed\n    #[error(\"signature verification failed\")]\n    VerificationFailed,\n\n    /// Invalid signature length\n    #[error(\"invalid signature length: expected {expected}, got {actual}\")]\n    InvalidSignatureLength {\n        /// Expected length\n        expected: usize,\n        /// Actual length\n        actual: usize,\n    },\n\n    /// Key derivation failed\n    #[error(\"key derivation failed: {0}\")]\n    KeyDerivation(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 70
            },
            {
              "name": "ifac::IFAC",
              "kind": "struct_item",
              "signature": "pub struct IFAC {\n\n}",
              "docs": "",
              "attributes": "#[derive(Clone)]",
              "line": 109
            },
            {
              "name": "ifac::IFAC::new",
              "kind": "function_item",
              "signature": "pub fn new(config: IFACConfig) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 117
            },
            {
              "name": "ifac::IFAC::sign",
              "kind": "function_item",
              "signature": "pub fn sign(&self, packet: &[u8]) -> Vec<u8>;",
              "docs": "",
              "attributes": "",
              "line": 147
            },
            {
              "name": "ifac::IFAC::verify",
              "kind": "function_item",
              "signature": "pub fn verify(&self, packet: &[u8], signature: &[u8]) -> Result<(), IFACError>;",
              "docs": "",
              "attributes": "",
              "line": 161
            },
            {
              "name": "ifac::IFAC::config",
              "kind": "function_item",
              "signature": "pub fn config(&self) -> &IFACConfig;",
              "docs": "",
              "attributes": "",
              "line": 196
            },
            {
              "name": "ifac::IFAC::signature_size",
              "kind": "function_item",
              "signature": "pub fn signature_size(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 201
            },
            {
              "name": "ifac::IFAC::add_signature",
              "kind": "function_item",
              "signature": "pub fn add_signature(&self, packet: &[u8]) -> Vec<u8>;",
              "docs": "",
              "attributes": "",
              "line": 208
            },
            {
              "name": "ifac::IFAC::verify_and_extract",
              "kind": "function_item",
              "signature": "pub fn verify_and_extract(&self, packet_with_sig: &[u8]) -> Result<Vec<u8>, IFACError>;",
              "docs": "",
              "attributes": "",
              "line": 224
            }
          ],
          "parseErrors": false
        },
        {
          "module": "interface",
          "source": "sigil/weave/filament/filament-interfaces/src/interface.rs",
          "sha256": "26a417b11db8a4026ca95404706c38f0d86c6269b1dc64149a1737dd1d850981",
          "attributes": "",
          "items": [
            {
              "name": "interface::InterfaceId",
              "kind": "struct_item",
              "signature": "pub struct InterfaceId(u64);",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]",
              "line": 11
            },
            {
              "name": "interface::InterfaceId::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 15
            },
            {
              "name": "interface::InterfaceId::as_u64",
              "kind": "function_item",
              "signature": "pub fn as_u64(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 21
            },
            {
              "name": "interface::InterfaceMode",
              "kind": "enum_item",
              "signature": "pub enum InterfaceMode {\n    /// Full meshing and transport functionality\n    Full,\n    /// Gateway with path discovery for downstream nodes\n    Gateway,\n    /// Access point mode (quiet, short-lived paths)\n    AccessPoint,\n    /// Roaming mode for mobile interfaces\n    Roaming,\n    /// Boundary mode for network segment transitions\n    Boundary,\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\n#[cfg_attr(feature = \"serde\", derive(serde::Serialize, serde::Deserialize))]",
              "line": 49
            },
            {
              "name": "interface::InterfaceStats",
              "kind": "struct_item",
              "signature": "pub struct InterfaceStats {\n/// Total packets sent\n\npub packets_sent: u64,\n/// Total packets received\n\npub packets_received: u64,\n/// Total bytes sent\n\npub bytes_sent: u64,\n/// Total bytes received\n\npub bytes_received: u64,\n/// Number of send errors\n\npub send_errors: u64,\n/// Number of receive errors\n\npub recv_errors: u64,\n/// Last send timestamp (unix millis)\n\npub last_send: Option<u64>,\n/// Last receive timestamp (unix millis)\n\npub last_recv: Option<u64>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Default)]",
              "line": 82
            },
            {
              "name": "interface::InterfaceStats::record_send",
              "kind": "function_item",
              "signature": "pub fn record_send(&mut self, bytes: usize);",
              "docs": "",
              "attributes": "",
              "line": 103
            },
            {
              "name": "interface::InterfaceStats::record_recv",
              "kind": "function_item",
              "signature": "pub fn record_recv(&mut self, bytes: usize);",
              "docs": "",
              "attributes": "",
              "line": 115
            },
            {
              "name": "interface::InterfaceStats::record_send_error",
              "kind": "function_item",
              "signature": "pub fn record_send_error(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 127
            },
            {
              "name": "interface::InterfaceStats::record_recv_error",
              "kind": "function_item",
              "signature": "pub fn record_recv_error(&mut self);",
              "docs": "",
              "attributes": "",
              "line": 132
            },
            {
              "name": "interface::InterfaceError",
              "kind": "enum_item",
              "signature": "pub enum InterfaceError {\n    /// Failed to send packet\n    #[error(\"send failed: {0}\")]\n    SendFailed(String),\n\n    /// Failed to receive packet\n    #[error(\"receive failed: {0}\")]\n    ReceiveFailed(String),\n\n    /// Interface is disconnected\n    #[error(\"interface disconnected\")]\n    Disconnected,\n\n    /// Interface is not enabled\n    #[error(\"interface not enabled\")]\n    NotEnabled,\n\n    /// Packet exceeds MTU\n    #[error(\"packet size {size} exceeds MTU {mtu}\")]\n    PacketTooLarge {\n        /// Packet size\n        size: usize,\n        /// Interface MTU\n        mtu: usize,\n    },\n\n    /// Configuration error\n    #[error(\"configuration error: {0}\")]\n    Configuration(String),\n\n    /// I/O error\n    #[error(\"I/O error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Timeout\n    #[error(\"operation timed out\")]\n    Timeout,\n\n    /// Authentication failure (IFAC)\n    #[error(\"authentication failed: {0}\")]\n    AuthenticationFailed(String),\n\n    /// Other error\n    #[error(\"interface error: {0}\")]\n    Other(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 139
            },
            {
              "name": "interface::Interface",
              "kind": "trait_item",
              "signature": "pub trait Interface: Send + Sync {\n    /// Get unique interface identifier\n    fn id(&self) -> InterfaceId;\n\n    /// Get human-readable interface name\n    fn name(&self) -> &str;\n\n    /// Get interface operating mode\n    fn mode(&self) -> InterfaceMode;\n\n    /// Get interface bitrate in bits per second\n    ///\n    /// Returns the nominal bitrate of the interface. For variable-rate interfaces,\n    /// this should return a conservative estimate.\n    fn bitrate(&self) -> u64;\n\n    /// Get maximum transmission unit (MTU) in bytes\n    ///\n    /// Filament requires a minimum MTU of 500 bytes.\n    fn mtu(&self) -> usize ;\n\n    /// Transmit a packet on the interface\n    ///\n    /// # Errors\n    ///\n    /// - [`InterfaceError::PacketTooLarge`] if packet exceeds MTU\n    /// - [`InterfaceError::SendFailed`] if transmission fails\n    /// - [`InterfaceError::NotEnabled`] if interface is disabled\n    async fn send(&mut self, packet: &[u8]) -> Result<(), InterfaceError>;\n\n    /// Receive a packet from the interface\n    ///\n    /// This method should block until a packet is available. For non-blocking\n    /// behavior, wrap calls in `tokio::select!` or similar.\n    ///\n    /// # Errors\n    ///\n    /// - [`InterfaceError::ReceiveFailed`] if reception fails\n    /// - [`InterfaceError::Disconnected`] if interface is disconnected\n    /// - [`InterfaceError::NotEnabled`] if interface is disabled\n    async fn recv(&mut self) -> Result<Vec<u8>, InterfaceError>;\n\n    /// Enable or disable the interface\n    ///\n    /// When disabled, send and receive operations should return errors.\n    async fn set_enabled(&mut self, enabled: bool) -> Result<(), InterfaceError>;\n\n    /// Check if interface is currently online and ready\n    fn is_online(&self) -> bool;\n\n    /// Get interface statistics\n    fn stats(&self) -> InterfaceStats ;\n\n    /// Get interface description (optional)\n    fn description(&self) -> Option<&str> ;\n}",
              "docs": "",
              "attributes": "#[async_trait]",
              "line": 253
            },
            {
              "name": "interface::SharedInterface",
              "kind": "type_item",
              "signature": "pub type SharedInterface = Arc<tokio::sync::Mutex<Box<dyn Interface>>>;",
              "docs": "",
              "attributes": "",
              "line": 317
            }
          ],
          "parseErrors": false
        },
        {
          "module": "manager",
          "source": "sigil/weave/filament/filament-interfaces/src/manager.rs",
          "sha256": "c16914f86c44e468bef4df0af7a2a209d073873a95836975b7fd51b86b46b21d",
          "attributes": "",
          "items": [
            {
              "name": "manager::InterfaceManagerError",
              "kind": "enum_item",
              "signature": "pub enum InterfaceManagerError {\n    /// Interface not found\n    #[error(\"interface not found: {0}\")]\n    InterfaceNotFound(InterfaceId),\n\n    /// Interface already exists\n    #[error(\"interface already exists: {0}\")]\n    InterfaceAlreadyExists(InterfaceId),\n\n    /// Interface error\n    #[error(\"interface error: {0}\")]\n    InterfaceError(#[from] InterfaceError),\n\n    /// No interfaces available\n    #[error(\"no interfaces available\")]\n    NoInterfaces,\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 14
            },
            {
              "name": "manager::PacketReceived",
              "kind": "struct_item",
              "signature": "pub struct PacketReceived {\n/// Interface that received the packet\n\npub interface_id: InterfaceId,\n/// Packet data\n\npub data: Vec<u8>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 34
            },
            {
              "name": "manager::InterfaceManager",
              "kind": "struct_item",
              "signature": "pub struct InterfaceManager {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "manager::InterfaceManager::new",
              "kind": "function_item",
              "signature": "pub fn new() -> Self;",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "manager::InterfaceManager::add_interface",
              "kind": "function_item",
              "signature": "pub async fn add_interface(\n        &mut self,\n        interface: Box<dyn Interface>,\n    ) -> Result<InterfaceId, InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 92
            },
            {
              "name": "manager::InterfaceManager::remove_interface",
              "kind": "function_item",
              "signature": "pub async fn remove_interface(&mut self, id: InterfaceId) -> Result<(), InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 138
            },
            {
              "name": "manager::InterfaceManager::get_interface",
              "kind": "function_item",
              "signature": "pub async fn get_interface(\n        &self,\n        id: InterfaceId,\n    ) -> Result<SharedInterface, InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 151
            },
            {
              "name": "manager::InterfaceManager::list_interfaces",
              "kind": "function_item",
              "signature": "pub async fn list_interfaces(&self) -> Vec<InterfaceId>;",
              "docs": "",
              "attributes": "",
              "line": 164
            },
            {
              "name": "manager::InterfaceManager::interface_count",
              "kind": "function_item",
              "signature": "pub async fn interface_count(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 170
            },
            {
              "name": "manager::InterfaceManager::send_to",
              "kind": "function_item",
              "signature": "pub async fn send_to(\n        &self,\n        interface_id: InterfaceId,\n        packet: &[u8],\n    ) -> Result<(), InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 176
            },
            {
              "name": "manager::InterfaceManager::broadcast",
              "kind": "function_item",
              "signature": "pub async fn broadcast(&self, packet: &[u8]) -> Result<usize, InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 193
            },
            {
              "name": "manager::InterfaceManager::broadcast_to_mode",
              "kind": "function_item",
              "signature": "pub async fn broadcast_to_mode(\n        &self,\n        packet: &[u8],\n        mode: crate::interface::InterfaceMode,\n    ) -> Result<usize, InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 216
            },
            {
              "name": "manager::InterfaceManager::recv",
              "kind": "function_item",
              "signature": "pub async fn recv(&self) -> Result<PacketReceived, InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 243
            },
            {
              "name": "manager::InterfaceManager::try_recv",
              "kind": "function_item",
              "signature": "pub async fn try_recv(&self) -> Option<PacketReceived>;",
              "docs": "",
              "attributes": "",
              "line": 253
            },
            {
              "name": "manager::InterfaceManager::set_interface_enabled",
              "kind": "function_item",
              "signature": "pub async fn set_interface_enabled(\n        &self,\n        interface_id: InterfaceId,\n        enabled: bool,\n    ) -> Result<(), InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 259
            },
            {
              "name": "manager::InterfaceManager::get_all_stats",
              "kind": "function_item",
              "signature": "pub async fn get_all_stats(&self) -> HashMap<InterfaceId, crate::interface::InterfaceStats>;",
              "docs": "",
              "attributes": "",
              "line": 276
            },
            {
              "name": "manager::InterfaceManager::total_packets_sent",
              "kind": "function_item",
              "signature": "pub async fn total_packets_sent(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 289
            },
            {
              "name": "manager::InterfaceManager::total_packets_received",
              "kind": "function_item",
              "signature": "pub async fn total_packets_received(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 295
            },
            {
              "name": "manager::InterfaceManager::total_bytes_sent",
              "kind": "function_item",
              "signature": "pub async fn total_bytes_sent(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 301
            },
            {
              "name": "manager::InterfaceManager::total_bytes_received",
              "kind": "function_item",
              "signature": "pub async fn total_bytes_received(&self) -> u64;",
              "docs": "",
              "attributes": "",
              "line": 307
            },
            {
              "name": "manager::InterfaceManager::shutdown",
              "kind": "function_item",
              "signature": "pub async fn shutdown(&mut self) -> Result<(), InterfaceManagerError>;",
              "docs": "",
              "attributes": "",
              "line": 313
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tcp_client",
          "source": "sigil/weave/filament/filament-interfaces/src/tcp_client.rs",
          "sha256": "71b2ceb3e8a07522a739aa7ec15efe806a6969dd122c14614b7cbddd9a1bf938",
          "attributes": "",
          "items": [
            {
              "name": "tcp_client::TCPClientConfig",
              "kind": "struct_item",
              "signature": "pub struct TCPClientConfig {\n/// Target server address\n\npub target_addr: SocketAddr,\n/// Interface mode\n\npub mode: InterfaceMode,\n/// Reconnection interval\n\npub reconnect_interval: Duration,\n/// Maximum reconnection attempts (None = infinite)\n\npub max_reconnect_attempts: Option<usize>,\n/// Connection timeout\n\npub connect_timeout: Duration,\n/// Optional IFAC authentication\n\npub ifac: Option<IFAC>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 20
            },
            {
              "name": "tcp_client::TCPClientInterface",
              "kind": "struct_item",
              "signature": "pub struct TCPClientInterface {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 83
            },
            {
              "name": "tcp_client::TCPClientInterface::new",
              "kind": "function_item",
              "signature": "pub async fn new(target_addr: SocketAddr, mode: InterfaceMode) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "tcp_client::TCPClientInterface::from_config",
              "kind": "function_item",
              "signature": "pub async fn from_config(config: TCPClientConfig) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 101
            },
            {
              "name": "tcp_client::TCPClientInterface::is_connected",
              "kind": "function_item",
              "signature": "pub async fn is_connected(&self) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 276
            },
            {
              "name": "tcp_client::TCPClientInterface::wait_for_connection",
              "kind": "function_item",
              "signature": "pub async fn wait_for_connection(&self, timeout: Duration) -> Result<(), InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 281
            }
          ],
          "parseErrors": false
        },
        {
          "module": "tcp_server",
          "source": "sigil/weave/filament/filament-interfaces/src/tcp_server.rs",
          "sha256": "2369281528f9e093798f54c5002ad69db6ca3b4fb1c032bf55d2bf3249adbc18",
          "attributes": "",
          "items": [
            {
              "name": "tcp_server::TCPServerConfig",
              "kind": "struct_item",
              "signature": "pub struct TCPServerConfig {\n/// Bind address\n\npub bind_addr: SocketAddr,\n/// Interface mode\n\npub mode: InterfaceMode,\n/// Maximum number of concurrent clients\n\npub max_clients: usize,\n/// Optional IFAC authentication\n\npub ifac: Option<IFAC>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 18
            },
            {
              "name": "tcp_server::TCPServerInterface",
              "kind": "struct_item",
              "signature": "pub struct TCPServerInterface {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 73
            },
            {
              "name": "tcp_server::TCPServerInterface::new",
              "kind": "function_item",
              "signature": "pub async fn new(bind_addr: SocketAddr, mode: InterfaceMode) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "tcp_server::TCPServerInterface::from_config",
              "kind": "function_item",
              "signature": "pub async fn from_config(config: TCPServerConfig) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 90
            },
            {
              "name": "tcp_server::TCPServerInterface::client_count",
              "kind": "function_item",
              "signature": "pub async fn client_count(&self) -> usize;",
              "docs": "",
              "attributes": "",
              "line": 260
            }
          ],
          "parseErrors": false
        },
        {
          "module": "udp",
          "source": "sigil/weave/filament/filament-interfaces/src/udp.rs",
          "sha256": "24f6095728e0d4fda98173335c2b347a3da6c1588bf3862bc8b0ed580231e54f",
          "attributes": "",
          "items": [
            {
              "name": "udp::UDPInterfaceConfig",
              "kind": "struct_item",
              "signature": "pub struct UDPInterfaceConfig {\n/// Local bind port\n\npub port: u16,\n/// Broadcast/multicast address\n\npub forward_ip: Option<IpAddr>,\n/// Forward port\n\npub forward_port: u16,\n/// Interface mode\n\npub mode: InterfaceMode,\n/// Enable broadcast\n\npub broadcast: bool,\n/// Optional IFAC authentication\n\npub ifac: Option<IFAC>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone)]",
              "line": 16
            },
            {
              "name": "udp::UDPInterface",
              "kind": "struct_item",
              "signature": "pub struct UDPInterface {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "udp::UDPInterface::new",
              "kind": "function_item",
              "signature": "pub async fn new(port: u16, mode: InterfaceMode) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 81
            },
            {
              "name": "udp::UDPInterface::from_config",
              "kind": "function_item",
              "signature": "pub async fn from_config(config: UDPInterfaceConfig) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "udp::UDPInterface::set_forward_address",
              "kind": "function_item",
              "signature": "pub async fn set_forward_address(&self, ip: IpAddr, port: u16);",
              "docs": "",
              "attributes": "",
              "line": 126
            },
            {
              "name": "udp::UDPInterface::set_broadcast",
              "kind": "function_item",
              "signature": "pub async fn set_broadcast(&self, enabled: bool) -> Result<(), InterfaceError>;",
              "docs": "",
              "attributes": "",
              "line": 134
            }
          ],
          "parseErrors": false
        },
        {
          "module": "serial",
          "source": "sigil/weave/filament/filament-interfaces/src/serial.rs",
          "sha256": "a19a5210d45bc66bac1eb195696828a23ba0243c800eb18d404edf4ca8ffd1b1",
          "attributes": "#[cfg(feature = \"serial\")]",
          "items": [
            {
              "name": "serial::SerialConfig",
              "kind": "struct_item",
              "signature": "pub struct SerialConfig {\n/// Serial port path (e.g., \"/dev/ttyUSB0\", \"COM3\")\n\npub port: String,\n/// Baud rate\n\npub baud_rate: u32,\n/// Data bits\n\npub data_bits: DataBits,\n/// Parity\n\npub parity: Parity,\n/// Stop bits\n\npub stop_bits: StopBits,\n/// Flow control\n\npub flow_control: FlowControl,\n/// Read timeout\n\npub timeout: Duration,\n/// Interface mode\n\npub mode: InterfaceMode,\n/// Optional IFAC authentication\n\npub ifac: Option<IFAC>\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]\n#[derive(Debug, Clone)]",
              "line": 18
            },
            {
              "name": "serial::SerialConfig::new",
              "kind": "function_item",
              "signature": "pub fn new(port: impl Into<String>, baud_rate: u32) -> Self;",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]",
              "line": 57
            },
            {
              "name": "serial::SerialInterface",
              "kind": "struct_item",
              "signature": "pub struct SerialInterface {\n\n}",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]",
              "line": 101
            },
            {
              "name": "serial::SerialInterface::new",
              "kind": "function_item",
              "signature": "pub async fn new(\n        port: impl Into<String>,\n        baud_rate: u32,\n        mode: InterfaceMode,\n    ) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]",
              "line": 108
            },
            {
              "name": "serial::SerialInterface::from_config",
              "kind": "function_item",
              "signature": "pub async fn from_config(config: SerialConfig) -> Result<Self, InterfaceError>;",
              "docs": "",
              "attributes": "#[cfg(feature = \"serial\")]",
              "line": 123
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": []
    },
    {
      "name": "filament-utilities",
      "version": "0.1.0",
      "source": "sigil/weave/filament/filament-utilities",
      "manifestSha256": "ac90a2b10f16984a58d5e7182c37f498d7714278ffd4342790a9a07f1b1ad465",
      "features": {},
      "publish": true,
      "url": "/reference/filament/filament-utilities",
      "modules": [
        {
          "module": "crate",
          "source": "sigil/weave/filament/filament-utilities/src/lib.rs",
          "sha256": "47ba796d5cb62f16576546ef6c505b55be66903d48dfce734484c02f1e2d9221",
          "attributes": "",
          "items": [
            {
              "name": "common",
              "kind": "module",
              "signature": "pub mod common;",
              "docs": "",
              "attributes": "",
              "line": 9
            },
            {
              "name": "daemon",
              "kind": "module",
              "signature": "pub mod daemon;",
              "docs": "",
              "attributes": "",
              "line": 10
            },
            {
              "name": "display",
              "kind": "module",
              "signature": "pub mod display;",
              "docs": "",
              "attributes": "",
              "line": 11
            },
            {
              "name": "rpc",
              "kind": "module",
              "signature": "pub mod rpc;",
              "docs": "",
              "attributes": "",
              "line": 12
            },
            {
              "name": "::UtilityError",
              "kind": "enum_item",
              "signature": "pub enum UtilityError {\n    #[error(\"Configuration error: {0}\")]\n    Config(String),\n\n    #[error(\"IO error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"RPC error: {0}\")]\n    Rpc(String),\n\n    #[error(\"Instance not found\")]\n    InstanceNotFound,\n\n    #[error(\"Permission denied: {0}\")]\n    PermissionDenied(String),\n\n    #[error(\"Invalid argument: {0}\")]\n    InvalidArgument(String),\n\n    #[error(\"Timeout waiting for response\")]\n    Timeout,\n\n    #[error(\"Parse error: {0}\")]\n    Parse(String),\n\n    #[error(\"Network error: {0}\")]\n    Network(String),\n}",
              "docs": "",
              "attributes": "#[derive(Error, Debug)]",
              "line": 16
            },
            {
              "name": "::Result",
              "kind": "type_item",
              "signature": "pub type Result<T> = std::result::Result<T, UtilityError>;",
              "docs": "",
              "attributes": "",
              "line": 46
            },
            {
              "name": "exit_codes",
              "kind": "module",
              "signature": "pub mod exit_codes;",
              "docs": "",
              "attributes": "",
              "line": 49
            },
            {
              "name": "exit_codes::SUCCESS",
              "kind": "const_item",
              "signature": "pub const SUCCESS: i32;",
              "docs": "",
              "attributes": "",
              "line": 51
            },
            {
              "name": "exit_codes::GENERAL_ERROR",
              "kind": "const_item",
              "signature": "pub const GENERAL_ERROR: i32;",
              "docs": "",
              "attributes": "",
              "line": 54
            },
            {
              "name": "exit_codes::MISUSE",
              "kind": "const_item",
              "signature": "pub const MISUSE: i32;",
              "docs": "",
              "attributes": "",
              "line": 57
            },
            {
              "name": "exit_codes::PERMISSION_DENIED",
              "kind": "const_item",
              "signature": "pub const PERMISSION_DENIED: i32;",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "exit_codes::CONFIG_ERROR",
              "kind": "const_item",
              "signature": "pub const CONFIG_ERROR: i32;",
              "docs": "",
              "attributes": "",
              "line": 63
            },
            {
              "name": "exit_codes::SERVICE_UNAVAILABLE",
              "kind": "const_item",
              "signature": "pub const SERVICE_UNAVAILABLE: i32;",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "exit_codes::TIMEOUT",
              "kind": "const_item",
              "signature": "pub const TIMEOUT: i32;",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "exit_codes::SIGTERM",
              "kind": "const_item",
              "signature": "pub const SIGTERM: i32;",
              "docs": "",
              "attributes": "",
              "line": 72
            },
            {
              "name": "::default_config_path",
              "kind": "function_item",
              "signature": "pub fn default_config_path() -> std::path::PathBuf;",
              "docs": "",
              "attributes": "",
              "line": 76
            },
            {
              "name": "::default_data_dir",
              "kind": "function_item",
              "signature": "pub fn default_data_dir() -> std::path::PathBuf;",
              "docs": "",
              "attributes": "",
              "line": 84
            },
            {
              "name": "::default_runtime_dir",
              "kind": "function_item",
              "signature": "pub fn default_runtime_dir() -> std::path::PathBuf;",
              "docs": "",
              "attributes": "",
              "line": 91
            },
            {
              "name": "::default_socket_path",
              "kind": "function_item",
              "signature": "pub fn default_socket_path() -> std::path::PathBuf;",
              "docs": "",
              "attributes": "",
              "line": 98
            },
            {
              "name": "::default_pid_path",
              "kind": "function_item",
              "signature": "pub fn default_pid_path() -> std::path::PathBuf;",
              "docs": "",
              "attributes": "",
              "line": 103
            }
          ],
          "parseErrors": false
        },
        {
          "module": "common",
          "source": "sigil/weave/filament/filament-utilities/src/common.rs",
          "sha256": "8f5d800ddc781d7d33e0846cf2b894433e50470f1cb4ae95b398c13843df5254",
          "attributes": "",
          "items": [
            {
              "name": "common::setup_logging",
              "kind": "function_item",
              "signature": "pub fn setup_logging(verbose: u8);",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "common::ensure_dir_exists",
              "kind": "function_item",
              "signature": "pub fn ensure_dir_exists(path: &Path) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 26
            },
            {
              "name": "common::read_file_string",
              "kind": "function_item",
              "signature": "pub fn read_file_string(path: &Path) -> Result<String>;",
              "docs": "",
              "attributes": "",
              "line": 40
            },
            {
              "name": "common::write_file_string",
              "kind": "function_item",
              "signature": "pub fn write_file_string(path: &Path, content: &str) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 50
            },
            {
              "name": "common::parse_destination_hash",
              "kind": "function_item",
              "signature": "pub fn parse_destination_hash(s: &str) -> Result<[u8; 16]>;",
              "docs": "",
              "attributes": "",
              "line": 60
            },
            {
              "name": "common::format_destination_hash",
              "kind": "function_item",
              "signature": "pub fn format_destination_hash(hash: &[u8; 16]) -> String;",
              "docs": "",
              "attributes": "",
              "line": 75
            },
            {
              "name": "common::format_bytes",
              "kind": "function_item",
              "signature": "pub fn format_bytes(bytes: u64) -> String;",
              "docs": "",
              "attributes": "",
              "line": 80
            },
            {
              "name": "common::format_duration",
              "kind": "function_item",
              "signature": "pub fn format_duration(seconds: u64) -> String;",
              "docs": "",
              "attributes": "",
              "line": 85
            },
            {
              "name": "common::check_privileges",
              "kind": "function_item",
              "signature": "pub fn check_privileges() -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 102
            }
          ],
          "parseErrors": false
        },
        {
          "module": "daemon",
          "source": "sigil/weave/filament/filament-utilities/src/daemon.rs",
          "sha256": "1f5159efb237004348d47463548beabfa5f59579606da929a3b37fc0316cc033",
          "attributes": "",
          "items": [
            {
              "name": "daemon::read_pid_file",
              "kind": "function_item",
              "signature": "pub fn read_pid_file(path: &Path) -> Result<u32>;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "daemon::write_pid_file",
              "kind": "function_item",
              "signature": "pub fn write_pid_file(path: &Path, pid: u32) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 18
            },
            {
              "name": "daemon::remove_pid_file",
              "kind": "function_item",
              "signature": "pub fn remove_pid_file(path: &Path) -> Result<()>;",
              "docs": "",
              "attributes": "",
              "line": 28
            },
            {
              "name": "daemon::is_daemon_running",
              "kind": "function_item",
              "signature": "pub fn is_daemon_running(pid_path: &Path) -> bool;",
              "docs": "",
              "attributes": "",
              "line": 36
            },
            {
              "name": "daemon::check_process_running",
              "kind": "function_item",
              "signature": "pub fn check_process_running(pid: u32) -> bool;",
              "docs": "",
              "attributes": "#[cfg(unix)]",
              "line": 46
            },
            {
              "name": "daemon::check_process_running",
              "kind": "function_item",
              "signature": "pub fn check_process_running(_pid: u32) -> bool;",
              "docs": "",
              "attributes": "#[cfg(not(unix))]",
              "line": 57
            },
            {
              "name": "daemon::signals",
              "kind": "module",
              "signature": "pub mod signals;",
              "docs": "",
              "attributes": "",
              "line": 62
            },
            {
              "name": "daemon::signals::create_signal_stream",
              "kind": "function_item",
              "signature": "pub fn create_signal_stream() -> io::Result<Signals>;",
              "docs": "",
              "attributes": "",
              "line": 69
            },
            {
              "name": "daemon::signals::handle_signals",
              "kind": "function_item",
              "signature": "pub async fn handle_signals<S>(mut signals: S) -> crate::Result<()>\n    where\n        S: Stream<Item = i32> + Unpin,;",
              "docs": "",
              "attributes": "",
              "line": 74
            }
          ],
          "parseErrors": false
        },
        {
          "module": "display",
          "source": "sigil/weave/filament/filament-utilities/src/display.rs",
          "sha256": "8edd21d93928bfa3e8582db58ec3e34fc0a6762bb941998b5075055ae07bd8c4",
          "attributes": "",
          "items": [
            {
              "name": "display::format_interface_table",
              "kind": "function_item",
              "signature": "pub fn format_interface_table(interfaces: &[InterfaceStatus]) -> String;",
              "docs": "",
              "attributes": "",
              "line": 8
            },
            {
              "name": "display::format_path_table",
              "kind": "function_item",
              "signature": "pub fn format_path_table(paths: &[PathInfo]) -> String;",
              "docs": "",
              "attributes": "",
              "line": 58
            },
            {
              "name": "display::success",
              "kind": "function_item",
              "signature": "pub fn success(msg: &str);",
              "docs": "",
              "attributes": "",
              "line": 112
            },
            {
              "name": "display::error",
              "kind": "function_item",
              "signature": "pub fn error(msg: &str);",
              "docs": "",
              "attributes": "",
              "line": 117
            },
            {
              "name": "display::warning",
              "kind": "function_item",
              "signature": "pub fn warning(msg: &str);",
              "docs": "",
              "attributes": "",
              "line": 122
            },
            {
              "name": "display::info",
              "kind": "function_item",
              "signature": "pub fn info(msg: &str);",
              "docs": "",
              "attributes": "",
              "line": 127
            },
            {
              "name": "display::print_kv",
              "kind": "function_item",
              "signature": "pub fn print_kv(key: &str, value: &str);",
              "docs": "",
              "attributes": "",
              "line": 132
            },
            {
              "name": "display::print_header",
              "kind": "function_item",
              "signature": "pub fn print_header(title: &str);",
              "docs": "",
              "attributes": "",
              "line": 137
            }
          ],
          "parseErrors": false
        },
        {
          "module": "rpc",
          "source": "sigil/weave/filament/filament-utilities/src/rpc.rs",
          "sha256": "bf6900609737a5cf330180966e84a57135c4148405fc5de028460ab4f7bb980b",
          "attributes": "",
          "items": [
            {
              "name": "rpc::RpcRequest",
              "kind": "struct_item",
              "signature": "pub struct RpcRequest {\npub id: String,\npub method: String,\npub params: serde_json::Value\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 12
            },
            {
              "name": "rpc::RpcResponse",
              "kind": "struct_item",
              "signature": "pub struct RpcResponse {\npub id: String,\npub result: Option<serde_json::Value>,\npub error: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 20
            },
            {
              "name": "rpc::InterfaceStatus",
              "kind": "struct_item",
              "signature": "pub struct InterfaceStatus {\npub name: String,\npub mode: String,\npub enabled: bool,\npub online: bool,\npub tx_bytes: u64,\npub rx_bytes: u64,\npub tx_packets: u64,\npub rx_packets: u64,\npub peers: usize\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 28
            },
            {
              "name": "rpc::PathInfo",
              "kind": "struct_item",
              "signature": "pub struct PathInfo {\npub destination: String,\npub hops: u8,\npub interface: String,\npub expires_at: i64,\npub rtt_ms: Option<u32>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 42
            },
            {
              "name": "rpc::IdentityInfo",
              "kind": "struct_item",
              "signature": "pub struct IdentityInfo {\npub hash: String,\npub public_key: String,\npub signing_key: String\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 52
            },
            {
              "name": "rpc::RpcClient",
              "kind": "struct_item",
              "signature": "pub struct RpcClient {\n\n}",
              "docs": "",
              "attributes": "",
              "line": 59
            },
            {
              "name": "rpc::RpcClient::new",
              "kind": "function_item",
              "signature": "pub fn new(socket_path: impl AsRef<Path>) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 66
            },
            {
              "name": "rpc::RpcClient::with_timeout",
              "kind": "function_item",
              "signature": "pub fn with_timeout(mut self, timeout: Duration) -> Self;",
              "docs": "",
              "attributes": "",
              "line": 74
            },
            {
              "name": "rpc::RpcClient::get_status",
              "kind": "function_item",
              "signature": "pub async fn get_status(&self) -> Result<serde_json::Value>;",
              "docs": "",
              "attributes": "",
              "line": 134
            },
            {
              "name": "rpc::RpcClient::get_interfaces",
              "kind": "function_item",
              "signature": "pub async fn get_interfaces(&self) -> Result<Vec<InterfaceStatus>>;",
              "docs": "",
              "attributes": "",
              "line": 142
            },
            {
              "name": "rpc::RpcClient::get_paths",
              "kind": "function_item",
              "signature": "pub async fn get_paths(&self) -> Result<Vec<PathInfo>>;",
              "docs": "",
              "attributes": "",
              "line": 155
            },
            {
              "name": "rpc::RpcClient::probe_destination",
              "kind": "function_item",
              "signature": "pub async fn probe_destination(&self, destination: &str) -> Result<ProbeResult>;",
              "docs": "",
              "attributes": "",
              "line": 166
            },
            {
              "name": "rpc::RpcClient::get_identity",
              "kind": "function_item",
              "signature": "pub async fn get_identity(&self) -> Result<IdentityInfo>;",
              "docs": "",
              "attributes": "",
              "line": 179
            },
            {
              "name": "rpc::RpcClient::transfer_file",
              "kind": "function_item",
              "signature": "pub async fn transfer_file(\n        &self,\n        destination: &str,\n        file_path: &str,\n    ) -> Result<TransferResult>;",
              "docs": "",
              "attributes": "",
              "line": 190
            },
            {
              "name": "rpc::ProbeResult",
              "kind": "struct_item",
              "signature": "pub struct ProbeResult {\npub reachable: bool,\npub rtt_ms: Option<u32>,\npub hops: Option<u8>,\npub error: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 215
            },
            {
              "name": "rpc::TransferResult",
              "kind": "struct_item",
              "signature": "pub struct TransferResult {\npub success: bool,\npub bytes_transferred: u64,\npub duration_ms: u64,\npub error: Option<String>\n}",
              "docs": "",
              "attributes": "#[derive(Debug, Clone, Serialize, Deserialize)]",
              "line": 224
            }
          ],
          "parseErrors": false
        }
      ],
      "binaries": [
        {
          "name": "filamentd",
          "source": "sigil/weave/filament/filament-utilities/src/bin/filamentd.rs",
          "sha256": "740aab7079c768a451b7539d085ad32b41e80c85a55cd0be7c5d784f91394531"
        },
        {
          "name": "filament-status",
          "source": "sigil/weave/filament/filament-utilities/src/bin/filament_status.rs",
          "sha256": "ad5614e5e170a81cd847b4c3cadb3f8b4cf330e74a4f7a585eaaa72d4d954a9f"
        },
        {
          "name": "filament-path",
          "source": "sigil/weave/filament/filament-utilities/src/bin/filament_path.rs",
          "sha256": "0c025baa26867eb565b1c5a8cb00da3782ba92168c2503f78acf5c964c86190c"
        },
        {
          "name": "filament-id",
          "source": "sigil/weave/filament/filament-utilities/src/bin/filament_id.rs",
          "sha256": "46561ad6089ed82b5425c06894f7ffe4ffa31bb7ae449538ac5b0f593c17bde2"
        },
        {
          "name": "filament-probe",
          "source": "sigil/weave/filament/filament-utilities/src/bin/filament_probe.rs",
          "sha256": "c3e0eff6469e24dff44ddd856034ab29e93e03a62eeb3e5f0f5f818addb54f8b"
        },
        {
          "name": "filament-cp",
          "source": "sigil/weave/filament/filament-utilities/src/bin/filament_cp.rs",
          "sha256": "61ee6a4aa7a89c3e694d2a75763bf196e1f332ec5d5bf20d8b0d78150fa4511f"
        }
      ]
    }
  ]
}
