Skip to main content

NodeConfig

Struct NodeConfig 

Source
pub struct NodeConfig {
    pub bind_addr: Option<TransportAddr>,
    pub known_peers: Vec<TransportAddr>,
    pub keypair: Option<(MlDsaPublicKey, MlDsaSecretKey)>,
    pub transport_providers: Vec<Arc<dyn TransportProvider>>,
    pub data_channel_capacity: Option<usize>,
    pub max_concurrent_uni_streams: Option<u32>,
    pub max_message_size: Option<usize>,
    pub port_mapping_enabled: Option<bool>,
}
Expand description

Minimal configuration for P2P nodes

All fields are optional - the node will auto-configure everything.

  • bind_addr: Defaults to 0.0.0.0:0 (random port)
  • known_peers: Defaults to empty (node can still accept connections)
  • keypair: Defaults to fresh generated keypair
  • transport_providers: Defaults to UDP plus best-effort constrained transports such as BLE when available

§Example

// Zero configuration
let config = NodeConfig::default();

// Or with known peers
let config = NodeConfig::builder()
    .known_peer("peer1.example.com:9000".parse()?)
    .build();

// Or with additional transport providers
#[cfg(feature = "ble")]
let config = NodeConfig::builder()
    .transport_provider(Arc::new(BleTransport::new().await?))
    .build();

Fields§

§bind_addr: Option<TransportAddr>

Bind address. Default: 0.0.0.0:0 (random port)

§known_peers: Vec<TransportAddr>

Known peers for initial discovery. Default: empty When empty, node can still accept incoming connections.

§keypair: Option<(MlDsaPublicKey, MlDsaSecretKey)>

Identity keypair (ML-DSA-65). Default: fresh generated Provide for persistent identity across restarts.

§transport_providers: Vec<Arc<dyn TransportProvider>>

Additional transport providers beyond the default transport set.

UDP is always included, and constrained transports such as BLE are registered automatically when compiled in and available at runtime. Use this to add additional transports like LoRa, serial, etc.

Transport capabilities are propagated to peer advertisements and used for routing decisions.

§data_channel_capacity: Option<usize>

Data channel capacity (bounded mpsc between reader tasks and recv). Default: 256.

§max_concurrent_uni_streams: Option<u32>

Maximum concurrent unidirectional QUIC streams per connection. Default: 100.

§max_message_size: Option<usize>

Maximum bytes accepted for a single message read from a stream. Default: crate::unified_config::P2pConfig::DEFAULT_MAX_MESSAGE_SIZE.

§port_mapping_enabled: Option<bool>

Reviewer P2 #2: surface ant-quic’s best-effort UPnP IGD port-mapping toggle at the simpler NodeConfig builder layer (the existing knob is only on P2pConfigBuilder). When Some(false), the UPnP discovery + port-mapping task is skipped. When None, the ant-quic default applies (currently enabled).

Implementations§

Source§

impl NodeConfig

Source

pub fn new() -> Self

Create a new config with defaults

Source

pub fn builder() -> NodeConfigBuilder

Create a builder for fluent construction

Source

pub fn with_bind_addr(addr: impl Into<TransportAddr>) -> Self

Create config with a specific bind address

Source

pub fn with_known_peers( peers: impl IntoIterator<Item = impl Into<TransportAddr>>, ) -> Self

Create config with known peers

Source

pub fn with_keypair( public_key: MlDsaPublicKey, secret_key: MlDsaSecretKey, ) -> Self

Create config with a specific ML-DSA-65 keypair

Source§

impl NodeConfig

Source

pub fn build_transport_registry(&self) -> TransportRegistry

Build a transport registry from this configuration

Creates a registry containing all configured transport providers. If no providers are configured, returns an empty registry (UDP should be added by the caller based on bind_addr).

Source

pub fn has_constrained_transports(&self) -> bool

Check if this configuration has any non-UDP transport providers

Trait Implementations§

Source§

impl Clone for NodeConfig

Source§

fn clone(&self) -> NodeConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NodeConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for NodeConfig

Source§

fn default() -> NodeConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more