prns-config 0.3.4

Config discovery, parsing, and reconciliation for the Personal Reticulum daemon
Documentation
pub(crate) mod section {
    pub const RETICULUM: &str = "reticulum";
    pub const LOGGING: &str = "logging";
    pub const INTERFACES: &str = "interfaces";
}

pub(crate) mod global {
    pub const SHARE_INSTANCE: &str = "share_instance";
    pub const INSTANCE_NAME: &str = "instance_name";
    pub const SHARED_INSTANCE_TYPE: &str = "shared_instance_type";
    pub const SHARED_INSTANCE_PORT: &str = "shared_instance_port";
    pub const INSTANCE_CONTROL_PORT: &str = "instance_control_port";
    pub const RPC_KEY: &str = "rpc_key";
    pub const ENABLE_TRANSPORT: &str = "enable_transport";
    pub const STATIC_TRANSPORT_IDENTITY: &str = "static_transport_identity";
    pub const LOCAL_HOPS_DELTA: &str = "local_hops_delta";
    pub const NETWORK_IDENTITY: &str = "network_identity";
    pub const LINK_MTU_DISCOVERY: &str = "link_mtu_discovery";
    pub const ENABLE_REMOTE_MANAGEMENT: &str = "enable_remote_management";
    pub const REMOTE_MANAGEMENT_ALLOWED: &str = "remote_management_allowed";
    pub const RESPOND_TO_PROBES: &str = "respond_to_probes";
    pub const FORCE_SHARED_INSTANCE_BITRATE: &str = "force_shared_instance_bitrate";
    pub const PANIC_ON_INTERFACE_ERROR: &str = "panic_on_interface_error";
    pub const USE_IMPLICIT_PROOF: &str = "use_implicit_proof";
    pub const DISCOVER_INTERFACES: &str = "discover_interfaces";
    pub const REQUIRED_DISCOVERY_VALUE: &str = "required_discovery_value";
    pub const PUBLISH_BLACKHOLE: &str = "publish_blackhole";
    pub const BLACKHOLE_SOURCES: &str = "blackhole_sources";
    pub const BLACKHOLE_UPDATE_INTERVAL: &str = "blackhole_update_interval";
    pub const INTERFACE_DISCOVERY_SOURCES: &str = "interface_discovery_sources";
    pub const AUTOCONNECT_DISCOVERED_INTERFACES: &str = "autoconnect_discovered_interfaces";
    pub const AUTOCONNECT_INTERFACE_GRAVITY: &str = "autoconnect_interface_gravity";
    pub const AUTOCONNECT_ANNOUNCES_TO_INTERNAL: &str = "autoconnect_announces_to_internal";
    pub const DEFAULT_GRAVITY: &str = "default_gravity";
    pub const DEFAULT_AR_TARGET: &str = "default_ar_target";
    pub const DEFAULT_AR_PENALTY: &str = "default_ar_penalty";
    pub const DEFAULT_AR_GRACE: &str = "default_ar_grace";
}

pub(crate) mod logging {
    pub const LEVEL: &str = "loglevel";
    pub const TIMESTAMPS: &str = "logtimestamps";
}

pub(crate) mod rnode {
    pub const TCP_SCHEME: &str = "tcp://";
    pub const BLE_SCHEME: &str = "ble://";
}

pub(crate) mod common {
    pub const INGRESS_CONTROL: &str = "ingress_control";
    pub const EGRESS_CONTROL: &str = "egress_control";
    pub const IC_MAX_HELD_ANNOUNCES: &str = "ic_max_held_announces";
    pub const IC_BURST_HOLD: &str = "ic_burst_hold";
    pub const IC_BURST_FREQ_NEW: &str = "ic_burst_freq_new";
    pub const IC_BURST_FREQ: &str = "ic_burst_freq";
    pub const IC_PR_BURST_FREQ_NEW: &str = "ic_pr_burst_freq_new";
    pub const IC_PR_BURST_FREQ: &str = "ic_pr_burst_freq";
    pub const EC_PR_FREQ: &str = "ec_pr_freq";
    pub const IC_NEW_TIME: &str = "ic_new_time";
    pub const IC_BURST_PENALTY: &str = "ic_burst_penalty";
    pub const IC_HELD_RELEASE_INTERVAL: &str = "ic_held_release_interval";
}

pub(crate) mod interface {
    use super::common;

    pub const TYPE: &str = "type";
    pub const INTERFACE_ENABLED: &str = "interface_enabled";
    pub const ENABLED: &str = "enabled";
    pub const INTERFACE_MODE: &str = "interface_mode";
    pub const MODE: &str = "mode";
    pub const OUTGOING: &str = "outgoing";
    pub const BITRATE: &str = "bitrate";
    pub const GRAVITY: &str = "gravity";
    pub const ANNOUNCE_CAP: &str = "announce_cap";
    pub const ANNOUNCE_RATE_TARGET: &str = "announce_rate_target";
    pub const ANNOUNCE_RATE_GRACE: &str = "announce_rate_grace";
    pub const ANNOUNCE_RATE_PENALTY: &str = "announce_rate_penalty";
    pub const NETWORK_NAME: &str = "network_name";
    pub const NETWORKNAME: &str = "networkname";
    pub const PASS_PHRASE: &str = "pass_phrase";
    pub const PASSPHRASE: &str = "passphrase";
    pub const IFAC_SIZE: &str = "ifac_size";
    pub const DISCOVERABLE: &str = "discoverable";
    pub const ANNOUNCE_INTERVAL: &str = "announce_interval";
    pub const DISCOVERY_STAMP_VALUE: &str = "discovery_stamp_value";
    pub const DISCOVERY_NAME: &str = "discovery_name";
    pub const DISCOVERY_ENCRYPT: &str = "discovery_encrypt";
    pub const REACHABLE_ON: &str = "reachable_on";
    pub const REACHABLE_PORT: &str = "reachable_port";
    pub const PUBLISH_IFAC: &str = "publish_ifac";
    pub const LATITUDE: &str = "latitude";
    pub const LONGITUDE: &str = "longitude";
    pub const HEIGHT: &str = "height";
    pub const DISCOVERY_FREQUENCY: &str = "discovery_frequency";
    pub const DISCOVERY_BANDWIDTH: &str = "discovery_bandwidth";
    pub const DISCOVERY_MODULATION: &str = "discovery_modulation";
    pub const BOOTSTRAP_ONLY: &str = "bootstrap_only";
    pub const RECURSIVE_PRS: &str = "recursive_prs";
    pub const ANNOUNCES_FROM_INTERNAL: &str = "announces_from_internal";
    pub const ANNOUNCES_TO_INTERNAL: &str = "announces_to_internal";
    pub const IGNORE_CONFIG_WARNINGS: &str = "ignore_config_warnings";
    pub const GROUP_ID: &str = "group_id";
    pub const DISCOVERY_SCOPE: &str = "discovery_scope";
    pub const DISCOVERY_PORT: &str = "discovery_port";
    pub const DATA_PORT: &str = "data_port";
    pub const DEVICES: &str = "devices";
    pub const IGNORED_DEVICES: &str = "ignored_devices";
    pub const MULTICAST_ADDRESS_TYPE: &str = "multicast_address_type";
    pub const TARGET_HOST: &str = "target_host";
    pub const TARGET_PORT: &str = "target_port";
    pub const TARGET: &str = "target";
    pub const KISS_FRAMING: &str = "kiss_framing";
    pub const I2P_TUNNELED: &str = "i2p_tunneled";
    pub const CONNECT_TIMEOUT: &str = "connect_timeout";
    pub const MAX_RECONNECT_TRIES: &str = "max_reconnect_tries";
    pub const FIXED_MTU: &str = "fixed_mtu";
    pub const LISTEN_IP: &str = "listen_ip";
    pub const LISTEN_PORT: &str = "listen_port";
    pub const DEVICE: &str = "device";
    pub const PORT: &str = "port";
    pub const PREFER_IPV6: &str = "prefer_ipv6";
    pub const FORWARD_IP: &str = "forward_ip";
    pub const FORWARD_PORT: &str = "forward_port";
    pub const SPEED: &str = "speed";
    pub const DATABITS: &str = "databits";
    pub const PARITY: &str = "parity";
    pub const STOPBITS: &str = "stopbits";
    pub const FLOW_CONTROL: &str = "flow_control";
    pub const PREAMBLE: &str = "preamble";
    pub const TXTAIL: &str = "txtail";
    pub const PERSISTENCE: &str = "persistence";
    pub const SLOTTIME: &str = "slottime";
    pub const ID_CALLSIGN: &str = "id_callsign";
    pub const ID_INTERVAL: &str = "id_interval";
    pub const CALLSIGN: &str = "callsign";
    pub const SSID: &str = "ssid";
    pub const FREQUENCY: &str = "frequency";
    pub const BANDWIDTH: &str = "bandwidth";
    pub const SPREADINGFACTOR: &str = "spreadingfactor";
    pub const CODINGRATE: &str = "codingrate";
    pub const TXPOWER: &str = "txpower";
    pub const AIRTIME_LIMIT_SHORT: &str = "airtime_limit_short";
    pub const AIRTIME_LIMIT_LONG: &str = "airtime_limit_long";
    pub const COMMAND: &str = "command";
    pub const RESPAWN_DELAY: &str = "respawn_delay";
    pub const REMOTE: &str = "remote";
    pub const LISTEN_ON: &str = "listen_on";
    pub const VPORT: &str = "vport";
    pub const PEERS: &str = "peers";
    pub const CONNECTABLE: &str = "connectable";

    pub const ENABLED_ALIASES: &[&str] = &[INTERFACE_ENABLED, ENABLED];
    pub const MODE_ALIASES: &[&str] = &[INTERFACE_MODE, MODE];
    pub const NETWORK_NAME_ALIASES: &[&str] = &[NETWORK_NAME, NETWORKNAME];
    pub const PASSPHRASE_ALIASES: &[&str] = &[PASS_PHRASE, PASSPHRASE];
    pub const ALIASES: &[&str] = &[
        INTERFACE_ENABLED,
        ENABLED,
        INTERFACE_MODE,
        MODE,
        NETWORK_NAME,
        NETWORKNAME,
        PASS_PHRASE,
        PASSPHRASE,
    ];

    pub const COMMON: &[&str] = &[
        TYPE,
        INTERFACE_ENABLED,
        ENABLED,
        INTERFACE_MODE,
        MODE,
        OUTGOING,
        BITRATE,
        GRAVITY,
        ANNOUNCE_CAP,
        ANNOUNCE_RATE_TARGET,
        ANNOUNCE_RATE_GRACE,
        ANNOUNCE_RATE_PENALTY,
        NETWORK_NAME,
        NETWORKNAME,
        PASS_PHRASE,
        PASSPHRASE,
        IFAC_SIZE,
        DISCOVERABLE,
        ANNOUNCE_INTERVAL,
        DISCOVERY_STAMP_VALUE,
        DISCOVERY_NAME,
        DISCOVERY_ENCRYPT,
        REACHABLE_ON,
        REACHABLE_PORT,
        PUBLISH_IFAC,
        LATITUDE,
        LONGITUDE,
        HEIGHT,
        DISCOVERY_FREQUENCY,
        DISCOVERY_BANDWIDTH,
        DISCOVERY_MODULATION,
        common::INGRESS_CONTROL,
        common::EGRESS_CONTROL,
        common::IC_MAX_HELD_ANNOUNCES,
        common::IC_BURST_HOLD,
        common::IC_BURST_FREQ_NEW,
        common::IC_BURST_FREQ,
        common::IC_PR_BURST_FREQ_NEW,
        common::IC_PR_BURST_FREQ,
        common::EC_PR_FREQ,
        common::IC_NEW_TIME,
        common::IC_BURST_PENALTY,
        common::IC_HELD_RELEASE_INTERVAL,
        BOOTSTRAP_ONLY,
        RECURSIVE_PRS,
        ANNOUNCES_FROM_INTERNAL,
        ANNOUNCES_TO_INTERNAL,
        IGNORE_CONFIG_WARNINGS,
    ];
    pub const AUTO: &[&str] = &[
        GROUP_ID,
        DISCOVERY_SCOPE,
        DISCOVERY_PORT,
        DATA_PORT,
        DEVICES,
        IGNORED_DEVICES,
        MULTICAST_ADDRESS_TYPE,
    ];
    pub const TCP_CLIENT: &[&str] = &[
        TARGET_HOST,
        TARGET_PORT,
        KISS_FRAMING,
        I2P_TUNNELED,
        CONNECT_TIMEOUT,
        MAX_RECONNECT_TRIES,
        FIXED_MTU,
    ];
    pub const TCP_SERVER: &[&str] = &[
        LISTEN_IP,
        LISTEN_PORT,
        DEVICE,
        PORT,
        PREFER_IPV6,
        I2P_TUNNELED,
        KISS_FRAMING,
        FIXED_MTU,
    ];
    pub const UDP: &[&str] = &[
        LISTEN_IP,
        LISTEN_PORT,
        FORWARD_IP,
        FORWARD_PORT,
        DEVICE,
        PORT,
    ];
    pub const SERIAL: &[&str] = &[PORT, SPEED, DATABITS, PARITY, STOPBITS];
    pub const KISS: &[&str] = &[
        PORT,
        SPEED,
        DATABITS,
        PARITY,
        STOPBITS,
        FLOW_CONTROL,
        PREAMBLE,
        TXTAIL,
        PERSISTENCE,
        SLOTTIME,
        ID_CALLSIGN,
        ID_INTERVAL,
    ];
    pub const AX25_KISS: &[&str] = &[
        PORT,
        SPEED,
        DATABITS,
        PARITY,
        STOPBITS,
        FLOW_CONTROL,
        PREAMBLE,
        TXTAIL,
        PERSISTENCE,
        SLOTTIME,
        CALLSIGN,
        SSID,
    ];
    pub const RNODE: &[&str] = &[
        PORT,
        FREQUENCY,
        BANDWIDTH,
        SPREADINGFACTOR,
        CODINGRATE,
        TXPOWER,
        FLOW_CONTROL,
        ID_CALLSIGN,
        ID_INTERVAL,
        AIRTIME_LIMIT_SHORT,
        AIRTIME_LIMIT_LONG,
    ];
    pub const RNODE_MULTI: &[&str] = &[PORT, ID_CALLSIGN, ID_INTERVAL];
    pub const RNODE_MULTI_SUBINTERFACE: &[&str] = &[
        INTERFACE_ENABLED,
        ENABLED,
        VPORT,
        FREQUENCY,
        BANDWIDTH,
        SPREADINGFACTOR,
        CODINGRATE,
        TXPOWER,
        FLOW_CONTROL,
        AIRTIME_LIMIT_SHORT,
        AIRTIME_LIMIT_LONG,
        OUTGOING,
    ];
    pub const PIPE: &[&str] = &[COMMAND, RESPAWN_DELAY];
    pub const BACKBONE: &[&str] = &[
        LISTEN_IP,
        LISTEN_PORT,
        TARGET_HOST,
        TARGET_PORT,
        PORT,
        DEVICE,
        PREFER_IPV6,
        I2P_TUNNELED,
        CONNECT_TIMEOUT,
        MAX_RECONNECT_TRIES,
        REMOTE,
        LISTEN_ON,
    ];
    pub const I2P: &[&str] = &[PEERS, CONNECTABLE];
    pub const WEAVE: &[&str] = &[PORT];
    pub const PRNS_WEBSOCKET_CLIENT: &[&str] = &[TARGET];
    pub const PRNS_WEBSOCKET_SERVER: &[&str] = &[LISTEN_IP, LISTEN_PORT, DEVICE, PORT, PREFER_IPV6];
}