deaddrop-core 2.6.0

DeadDrop protocol, crypto, identities, chunks, and object store
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum NodeMode {
    Performance,
    #[default]
    Balanced,
    Battery,
    Offline,
    RelayOnly,
    Private,
}

impl NodeMode {
    pub fn discovery_enabled(self) -> bool {
        !matches!(self, Self::Offline | Self::Private)
    }

    pub fn unsolicited_relay(self) -> bool {
        matches!(self, Self::Performance | Self::Balanced | Self::RelayOnly)
    }

    pub fn retain_encounters(self) -> bool {
        !matches!(self, Self::Private | Self::Offline)
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum NodeRole {
    #[default]
    Personal,
    Mobile,
    Relay,
    Gateway,
    Archive,
    Edge,
    Bridge,
}

impl NodeRole {
    pub fn from_str_role(s: &str) -> Option<Self> {
        Some(match s {
            "personal" => Self::Personal,
            "mobile" => Self::Mobile,
            "relay" => Self::Relay,
            "gateway" => Self::Gateway,
            "archive" => Self::Archive,
            "edge" => Self::Edge,
            "bridge" => Self::Bridge,
            _ => return None,
        })
    }
}