enigma_node_types/
presence.rs1use 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}