teliox 0.17.13

Library for the Transaction Event Log
Documentation
use said::SelfAddressingIdentifier;
use serde::{Deserialize, Serialize};

use crate::error::Error;

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct EventSourceSeal {
    pub sn: u64,
    pub digest: SelfAddressingIdentifier,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct AttachedSourceSeal {
    pub seal: EventSourceSeal,
}

impl From<EventSourceSeal> for AttachedSourceSeal {
    fn from(seal: EventSourceSeal) -> Self {
        AttachedSourceSeal { seal }
    }
}

impl AttachedSourceSeal {
    pub fn new(sn: u64, dig: SelfAddressingIdentifier) -> Self {
        let seal = EventSourceSeal { sn, digest: dig };
        Self { seal }
    }

    pub fn serialize(&self) -> Result<Vec<u8>, Error> {
        let attachment = cesrox::group::Group::SourceSealCouples(vec![(
            self.seal.sn,
            self.seal.digest.clone().into(),
        )]);
        Ok(attachment.to_cesr_str().as_bytes().to_vec())
    }
}