tlpt 0.8.0

A set of protocols for building local-first distributed systems
Documentation
use std::{fmt::Display, str::FromStr};

use endr::ObjectID;
use litl::{impl_debug_as_litl, Val};
use ridl::symm_encr::{Encrypted, KeySecret};
use serde_derive::{Deserialize, Serialize};

use crate::DocID;

#[derive(Serialize, Deserialize)]
pub struct InvitationPrivatePart {
    pub inner: crew_rs::Invitation,
    pub doc: Option<DocID>,
    pub private_meta: Option<Val>,
}

#[derive(Serialize, Deserialize)]
pub struct Invitation {
    pub(crate) private: Encrypted<InvitationPrivatePart>,
    pub public_meta: Option<Val>,
}

#[derive(Serialize, Deserialize)]
pub struct InvitationToken {
    pub invitation_id: ObjectID,
    pub secret: KeySecret,
}

// TODO: just diplay as JSON?
impl Display for InvitationToken {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "{}",
            litl::to_string(self).expect("Couldnt serialize invitation token")
        )
    }
}

impl FromStr for InvitationToken {
    type Err = litl::Error;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        litl::from_str(s)
    }
}

impl_debug_as_litl!(InvitationToken);