rd-std 0.1.0

std for rabbit-digger
Documentation
mod client;
mod common;
pub mod protocol;
mod server;

pub use client::Socks5Client;
pub use server::Socks5Server;

use rd_interface::{
    registry::{NetFactory, ServerFactory},
    util::get_one_net,
    Net, Registry, Result,
};
use serde_derive::Deserialize;

#[derive(Debug, Deserialize)]
pub struct Config {
    address: String,
    port: u16,
}

#[derive(Debug, Deserialize)]
pub struct ServerConfig {
    bind: String,
}

impl NetFactory for Socks5Client {
    const NAME: &'static str = "socks5";
    type Config = Config;
    type Net = Self;

    fn new(net: Vec<rd_interface::Net>, config: Self::Config) -> Result<Self> {
        Ok(Socks5Client::new(
            get_one_net(net)?,
            config.address,
            config.port,
        ))
    }
}

impl ServerFactory for server::Socks5 {
    const NAME: &'static str = "socks5";
    type Config = ServerConfig;
    type Server = Self;

    fn new(listen_net: Net, net: Net, Self::Config { bind }: Self::Config) -> Result<Self> {
        Ok(server::Socks5::new(listen_net, net, bind))
    }
}

pub fn init(registry: &mut Registry) -> Result<()> {
    registry.add_net::<Socks5Client>();
    registry.add_server::<server::Socks5>();
    Ok(())
}