prns-core 0.3.4

Pure Reticulum engine and wire contract for Personal Reticulum
pub use crate::interfaces::tcp::{
    descriptor, FRAMED_LEN, FRAME_CAP, READ_BUF_LEN, TCP_HW_MTU_CAP as HW_MTU_CAP,
};
use crate::interfaces::{
    tcp, BitrateBps, ConfiguredInterfacePolicy, EffectiveInterfacePolicy, InterfaceDefaults,
};

pub const BACKBONE_BITRATE_ESTIMATE: BitrateBps = BitrateBps::guess(1_000_000_000);

pub const BACKBONE_CLIENT_BITRATE_ESTIMATE: BitrateBps = tcp::TCP_BITRATE_ESTIMATE;

pub const DEFAULTS: InterfaceDefaults = InterfaceDefaults {
    bitrate: BACKBONE_BITRATE_ESTIMATE,
    ..tcp::DEFAULTS
};

pub const CLIENT_DEFAULTS: InterfaceDefaults = InterfaceDefaults {
    bitrate: BACKBONE_CLIENT_BITRATE_ESTIMATE,
    ..tcp::DEFAULTS
};

#[must_use]
pub fn configured_policy(configured: ConfiguredInterfacePolicy) -> EffectiveInterfacePolicy {
    DEFAULTS.configured(configured)
}

#[must_use]
pub fn policy_for_bitrate(bitrate: BitrateBps) -> EffectiveInterfacePolicy {
    configured_policy(ConfiguredInterfacePolicy {
        bitrate: Some(bitrate),
        ..ConfiguredInterfacePolicy::default()
    })
}