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
29impl 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);