ppaass-protocol-v2 0.1.1

The ppaass protocol version 2
Documentation
use crate::PpaassProtocolUnifyAddress;
use bytes::Bytes;
use derive_more::{Constructor, Display};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Display, Copy, Clone)]
pub enum TunnelType {
    #[display("TCP")]
    Tcp,
    #[display("UDP")]
    Udp,
}

#[derive(Serialize, Deserialize, Debug, Constructor, Display)]
#[display(
    r#"{{
    tunnel_id: {tunnel_id},
    tunnel_type: {tunnel_type},
    src_address: {src_address},
    dst_address: {dst_address},
    }}"#
)]
pub struct TunnelInit {
    tunnel_id: String,
    tunnel_type: TunnelType,
    src_address: PpaassProtocolUnifyAddress,
    dst_address: PpaassProtocolUnifyAddress,
}

impl TunnelInit {
    pub fn tunnel_id(&self) -> &str {
        self.tunnel_id.as_str()
    }

    pub fn tunnel_type(&self) -> TunnelType {
        self.tunnel_type
    }

    pub fn src_address(&self) -> &PpaassProtocolUnifyAddress {
        &self.src_address
    }

    pub fn dst_address(&self) -> &PpaassProtocolUnifyAddress {
        &self.dst_address
    }
}

#[derive(Serialize, Deserialize, Debug, Constructor, Display)]
#[display(
    r#"{{
    tunnel_id: {tunnel_id},
    tunnel_type: {tunnel_type},
    src_address: {src_address},
    dst_address: {dst_address},
    tunnel_data: {tunnel_data:?}
    }}"#
)]
pub struct TunnelData {
    tunnel_id: String,
    tunnel_type: TunnelType,
    src_address: PpaassProtocolUnifyAddress,
    dst_address: PpaassProtocolUnifyAddress,
    tunnel_data: Bytes,
}

impl TunnelData {
    pub fn tunnel_id(&self) -> &str {
        self.tunnel_id.as_str()
    }

    pub fn tunnel_type(&self) -> TunnelType {
        self.tunnel_type
    }

    pub fn src_address(&self) -> &PpaassProtocolUnifyAddress {
        &self.src_address
    }

    pub fn dst_address(&self) -> &PpaassProtocolUnifyAddress {
        &self.dst_address
    }
}

#[derive(Serialize, Deserialize, Debug, Constructor, Display)]
#[display(
    r#"{{
    tunnel_id: {tunnel_id},
    src_address: {src_address},
    dst_address: {dst_address},
    }}"#
)]
pub struct TunnelClose {
    tunnel_id: String,
    src_address: PpaassProtocolUnifyAddress,
    dst_address: PpaassProtocolUnifyAddress,
}

impl TunnelClose {
    pub fn tunnel_id(&self) -> &str {
        self.tunnel_id.as_str()
    }

    pub fn src_address(&self) -> &PpaassProtocolUnifyAddress {
        &self.src_address
    }

    pub fn dst_address(&self) -> &PpaassProtocolUnifyAddress {
        &self.dst_address
    }
}