use impulse_server_kit::salvo;
use salvo::oapi::ToSchema;
use serde::{Deserialize, Serialize};
use crate::VecVisitor;
#[derive(Deserialize, Serialize, ToSchema, PartialEq, Eq, Hash, Clone)]
pub struct GenerateInvitationRequest {
pub private_admin_key_begin: Vec<u8>,
}
#[derive(ToSchema, PartialEq, Eq, Hash, Clone)]
pub struct Invite(Vec<u8>);
impl serde::Serialize for Invite {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeSeq;
let mut seq = serializer.serialize_seq(Some(self.0.len()))?;
for el in self.0.as_slice() {
seq.serialize_element(el)?;
}
seq.end()
}
}
impl<'de> serde::Deserialize<'de> for Invite {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
Ok(Self(deserializer.deserialize_seq(VecVisitor)?))
}
}
impl Invite {
pub fn from_raw(code: Vec<u8>) -> Self {
Self(code)
}
pub fn as_slice(&self) -> &[u8] {
self.0.as_slice()
}
pub fn into_raw(self) -> Vec<u8> {
self.0
}
}