tlpt/
invitation.rs

1use std::{fmt::Display, str::FromStr};
2
3use endr::ObjectID;
4use litl::{impl_debug_as_litl, Val};
5use ridl::symm_encr::{Encrypted, KeySecret};
6use serde_derive::{Deserialize, Serialize};
7
8use crate::DocID;
9
10#[derive(Serialize, Deserialize)]
11pub struct InvitationPrivatePart {
12    pub inner: crew_rs::Invitation,
13    pub doc: Option<DocID>,
14    pub private_meta: Option<Val>,
15}
16
17#[derive(Serialize, Deserialize)]
18pub struct Invitation {
19    pub(crate) private: Encrypted<InvitationPrivatePart>,
20    pub public_meta: Option<Val>,
21}
22
23#[derive(Serialize, Deserialize)]
24pub struct InvitationToken {
25    pub invitation_id: ObjectID,
26    pub secret: KeySecret,
27}
28
29// TODO: just diplay as JSON?
30impl Display for InvitationToken {
31    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32        write!(
33            f,
34            "{}",
35            litl::to_string(self).expect("Couldnt serialize invitation token")
36        )
37    }
38}
39
40impl FromStr for InvitationToken {
41    type Err = litl::Error;
42
43    fn from_str(s: &str) -> Result<Self, Self::Err> {
44        litl::from_str(s)
45    }
46}
47
48impl_debug_as_litl!(InvitationToken);