ppaass-protocol-v2 0.1.1

The ppaass protocol version 2
Documentation
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
    }
}