Skip to main content

authnz_common/types/apps/
invites.rs

1//! Invite types module.
2
3use impulse_server_kit::salvo;
4use salvo::oapi::ToSchema;
5use serde::{Deserialize, Serialize};
6
7use crate::VecVisitor;
8
9#[derive(Deserialize, Serialize, ToSchema, PartialEq, Eq, Hash, Clone)]
10/// Used by C3A administrator for invite generation.
11pub struct GenerateInvitationRequest {
12  /// First 24 bytes of private C3A admin key.
13  pub private_admin_key_begin: Vec<u8>,
14}
15
16#[derive(ToSchema, PartialEq, Eq, Hash, Clone)]
17/// Unique invitation code.
18pub struct Invite(Vec<u8>);
19
20impl serde::Serialize for Invite {
21  fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22    use serde::ser::SerializeSeq;
23
24    let mut seq = serializer.serialize_seq(Some(self.0.len()))?;
25    for el in self.0.as_slice() {
26      seq.serialize_element(el)?;
27    }
28    seq.end()
29  }
30}
31
32impl<'de> serde::Deserialize<'de> for Invite {
33  fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
34    Ok(Self(deserializer.deserialize_seq(VecVisitor)?))
35  }
36}
37
38impl Invite {
39  /// Create from raw bytes.
40  pub fn from_raw(code: Vec<u8>) -> Self {
41    Self(code)
42  }
43
44  /// Returns as slice.
45  pub fn as_slice(&self) -> &[u8] {
46    self.0.as_slice()
47  }
48
49  /// Returns as vec.
50  pub fn into_raw(self) -> Vec<u8> {
51    self.0
52  }
53}