Skip to main content

deaddrop_core/
destination.rs

1use crate::ids::PeerId;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
5#[serde(tag = "kind", rename_all = "snake_case")]
6pub enum Destination {
7    One { peer: PeerId },
8    Many { peers: Vec<PeerId> },
9    Group { id: String },
10    Public,
11}
12
13impl Destination {
14    pub fn includes(&self, peer: &PeerId) -> bool {
15        match self {
16            Self::One { peer: p } => p == peer,
17            Self::Many { peers } => peers.contains(peer),
18            Self::Group { .. } => false,
19            Self::Public => true,
20        }
21    }
22
23    pub fn is_public(&self) -> bool {
24        matches!(self, Self::Public)
25    }
26}