enigma-node-types 0.0.1

Canonical node-facing types and strict codecs for Enigma (UserId hashing, identities, presence, relay envelopes).
Documentation
use serde::{Deserialize, Serialize};

use crate::error::{EnigmaNodeTypesError, Result};
use crate::user_id::UserId;

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct Presence {
    pub user_id: UserId,
    pub addr: String,
    pub ts_ms: u64,
}

impl Presence {
    pub fn validate(&self) -> Result<()> {
        let trimmed = self.addr.trim();
        if trimmed.is_empty() || trimmed.len() > 256 {
            return Err(EnigmaNodeTypesError::InvalidField("addr"));
        }
        if self.ts_ms == 0 {
            return Err(EnigmaNodeTypesError::InvalidField("ts_ms"));
        }
        Ok(())
    }
}