enigma_node_types/
presence.rs

1use serde::{Deserialize, Serialize};
2
3use crate::error::{EnigmaNodeTypesError, Result};
4use crate::user_id::UserId;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7#[serde(deny_unknown_fields)]
8pub struct Presence {
9    pub user_id: UserId,
10    pub addr: String,
11    pub ts_ms: u64,
12}
13
14impl Presence {
15    pub fn validate(&self) -> Result<()> {
16        let trimmed = self.addr.trim();
17        if trimmed.is_empty() || trimmed.len() > 256 {
18            return Err(EnigmaNodeTypesError::InvalidField("addr"));
19        }
20        if self.ts_ms == 0 {
21            return Err(EnigmaNodeTypesError::InvalidField("ts_ms"));
22        }
23        Ok(())
24    }
25}