mod business_obj;
pub use business_obj::*;
use bytes::Bytes;
use derive_more::{Constructor, Display};
use serde::{Deserialize, Serialize};
use std::net::SocketAddr;
#[derive(Debug, Serialize, Deserialize, Display, Clone)]
pub enum PpaassProtocolUnifyAddress {
#[display("{:?}", _0)]
Socket(SocketAddr),
#[display("{}:{}", _0, _1)]
Domain(String, u16),
}
impl From<SocketAddr> for PpaassProtocolUnifyAddress {
fn from(value: SocketAddr) -> Self {
Self::Socket(value)
}
}
impl From<(String, u16)> for PpaassProtocolUnifyAddress {
fn from(value: (String, u16)) -> Self {
Self::Domain(value.0, value.1)
}
}
#[derive(Debug, Serialize, Deserialize, Display)]
pub enum PpaassProtocolPayloadEncryption {
#[display("{:?}", _0)]
Aes(Bytes),
}
#[derive(Debug, Serialize, Deserialize, Constructor)]
pub struct PpaassProtocolPacket {
magic_flag: [u8; 8],
payload_length: usize,
payload: Bytes,
}
impl PpaassProtocolPacket {
pub fn magic_flag(&self) -> &[u8] {
&self.magic_flag
}
pub fn payload_length(&self) -> usize {
self.payload_length
}
pub fn payload(&self) -> &[u8] {
&self.payload
}
}
#[derive(Debug, Serialize, Deserialize, Display, Constructor)]
#[display(
r#"{{
user_token: {user_token},
encryption: {encryption},
business_obj: {business_obj:?},
}}"#
)]
pub struct PpaassProtocolPayload {
user_token: String,
encryption: PpaassProtocolPayloadEncryption,
business_obj: Bytes,
}
impl PpaassProtocolPayload {
pub fn user_token(&self) -> &str {
&self.user_token
}
pub fn encryption(&self) -> &PpaassProtocolPayloadEncryption {
&self.encryption
}
pub fn business_obj(&self) -> &[u8] {
&self.business_obj
}
}