lxmf-runtime 0.9.5

In-process LXMF SDK backend over the Reticulum transport runtime.
Documentation
use std::sync::Arc;
use std::time::Duration;

use rns_transport::hash::AddressHash;
use rns_transport::identity::PrivateIdentity;
use rns_transport::transport::Transport;
use tokio::runtime::Handle;

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct InProcessBackendLimits {
    pub event_retention: usize,
    pub delivery_retention: usize,
    pub send_report_retention: usize,
}

impl Default for InProcessBackendLimits {
    fn default() -> Self {
        Self { event_retention: 2_048, delivery_retention: 1_024, send_report_retention: 512 }
    }
}

#[derive(Clone)]
pub struct InProcessBackendConfig {
    pub runtime_id: String,
    pub runtime_handle: Handle,
    pub transport: Arc<Transport>,
    pub identity: PrivateIdentity,
    pub source_destination: AddressHash,
    pub propagation_relay: Option<AddressHash>,
    pub link_connect_timeout: Duration,
    pub link_connect_attempts: usize,
    pub resource_transfer_timeout: Duration,
    pub limits: InProcessBackendLimits,
}

impl InProcessBackendConfig {
    pub fn new(
        runtime_id: impl Into<String>,
        runtime_handle: Handle,
        transport: Arc<Transport>,
        identity: PrivateIdentity,
        source_destination: AddressHash,
    ) -> Self {
        Self {
            runtime_id: runtime_id.into(),
            runtime_handle,
            transport,
            identity,
            source_destination,
            propagation_relay: None,
            link_connect_timeout: Duration::from_secs(20),
            link_connect_attempts: 3,
            resource_transfer_timeout: Duration::from_secs(120),
            limits: InProcessBackendLimits::default(),
        }
    }
}