jazz-rs 0.7.0

A framework for CRDT based, end-to-end enrypted distributed apps
Documentation
use std::{fmt::Display, str::FromStr};

use serde_derive::{Deserialize, Serialize};

use litl::{impl_debug_as_litl, impl_single_tagged_data_serde, SingleTaggedData, Val};
use caro::ObjectID;
use ridl::symm_encr::{Encrypted, KeySecret};
use credo::{Credential, ScopeID};

use crate::{DocID, team::TeamID};

#[derive(Copy, Clone, Serialize, Deserialize, Debug)]
pub enum InvitationKind {
    Reader,
    Writer,
    Admin,
}

#[derive(Serialize, Deserialize)]
pub struct InvitationPrivatePart {
    pub team_id: TeamID,
    pub kind: InvitationKind,
    pub(crate) credential: Credential,
    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);