commonware-p2p 2026.5.0

Communicate with authenticated peers over encrypted connections.
Documentation
//! Peer

use crate::authenticated::lookup::metrics;
use commonware_codec::Error as CodecError;
use commonware_cryptography::PublicKey;
use commonware_runtime::telemetry::metrics::CounterFamily;
use std::num::NonZeroUsize;
use thiserror::Error;

mod actor;
pub use actor::Actor;

mod ingress;
pub use ingress::{Mailbox, Message};

pub struct Config<C: PublicKey> {
    pub mailbox_size: NonZeroUsize,
    pub send_batch_size: NonZeroUsize,
    pub ping_frequency: std::time::Duration,
    pub sent_messages: CounterFamily<metrics::Message<C>>,
    pub received_messages: CounterFamily<metrics::Message<C>>,
    pub rate_limited: CounterFamily<metrics::Message<C>>,
}

#[derive(Error, Debug)]
pub enum Error {
    #[error("peer killed: {0}")]
    PeerKilled(String),
    #[error("send failed: {0}")]
    SendFailed(commonware_stream::encrypted::Error),
    #[error("peer disconnected")]
    PeerDisconnected,
    #[error("receive failed: {0}")]
    ReceiveFailed(commonware_stream::encrypted::Error),
    #[error("decode failed: {0}")]
    DecodeFailed(CodecError),
    #[error("unexpected failure: {0}")]
    UnexpectedFailure(commonware_runtime::Error),
    #[error("invalid channel")]
    InvalidChannel,
}