From 0145c75c9448c32c51edec280a76daa67f967493 Mon Sep 17 00:00:00 2001 From: spacemeowx2 Date: Mon, 21 Jun 2021 21:23:24 +0800 Subject: [PATCH] refactor: use rd_config attribute --- Cargo.toml | 3 +-- protocol/obfs/Cargo.toml | 1 - protocol/obfs/src/http_simple.rs | 9 ++++----- protocol/obfs/src/lib.rs | 8 +++----- protocol/obfs/src/obfs_net.rs | 11 ++++------- protocol/obfs/src/plain.rs | 9 +++------ protocol/raw/Cargo.toml | 1 - protocol/raw/src/net.rs | 8 ++------ protocol/raw/src/server.rs | 12 +++--------- protocol/remote/Cargo.toml | 1 - protocol/remote/src/lib.rs | 7 +++---- protocol/remote/src/protocol.rs | 15 +++++++-------- protocol/ss/Cargo.toml | 1 - protocol/ss/src/client.rs | 11 ++++------- protocol/ss/src/server.rs | 9 +++------ protocol/ss/src/wrapper.rs | 12 ++++-------- protocol/trojan/Cargo.toml | 1 - protocol/trojan/src/client.rs | 11 ++++------- rabbit-digger | 2 +- src/api_server/reject.rs | 2 +- src/config.rs | 2 +- src/select.rs | 9 ++++----- src/translate/clash.rs | 2 +- 23 files changed, 53 insertions(+), 94 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 589c97b5..a53ad761 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,8 +24,7 @@ pin-project-lite = "0.2.6" serde_yaml = "0.8.15" yaml-merge-keys = { version = "0.4.1", features = ["serde_yaml"] } serde_json = "1.0" -serde = "1.0.119" -serde_derive = "1.0.119" +serde = { version = "1.0.119", features = ["derive"] } warp = { version = "0.3.1", default-features = false, features = ["websocket"], optional = true } dirs = { version = "3.0.2", optional = true } rd-interface = { path = "./rabbit-digger/rd-interface/", version = "0.4" } diff --git a/protocol/obfs/Cargo.toml b/protocol/obfs/Cargo.toml index a7727438..838bb09c 100644 --- a/protocol/obfs/Cargo.toml +++ b/protocol/obfs/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [dependencies] rd-interface = { path = "../../rabbit-digger/rd-interface/", version = "0.4" } # rd-interface = "0.3" -serde_derive = "1.0" serde = "1.0" tracing = "0.1.26" tokio = "1.0" diff --git a/protocol/obfs/src/http_simple.rs b/protocol/obfs/src/http_simple.rs index 25f1b3d2..8f5295a5 100644 --- a/protocol/obfs/src/http_simple.rs +++ b/protocol/obfs/src/http_simple.rs @@ -10,14 +10,13 @@ use futures::ready; use pin_project_lite::pin_project; use rand::prelude::*; use rd_interface::{ - async_trait, - schemars::{self, JsonSchema}, - Address, AsyncWrite, Config, ITcpStream, IntoDyn, ReadBuf, Result, TcpStream, NOT_IMPLEMENTED, + async_trait, prelude::*, rd_config, Address, AsyncWrite, ITcpStream, IntoDyn, ReadBuf, Result, + TcpStream, NOT_IMPLEMENTED, }; -use serde_derive::{Deserialize, Serialize}; use tokio::io::AsyncRead; -#[derive(Debug, Serialize, Deserialize, Config, JsonSchema)] +#[rd_config] +#[derive(Debug)] pub struct HttpSimple { obfs_param: String, } diff --git a/protocol/obfs/src/lib.rs b/protocol/obfs/src/lib.rs index eeaf22e9..b4010add 100644 --- a/protocol/obfs/src/lib.rs +++ b/protocol/obfs/src/lib.rs @@ -2,11 +2,8 @@ use std::net::SocketAddr; use obfs_net::{ObfsNet, ObfsNetConfig}; use rd_interface::{ - registry::NetFactory, - schemars::{self, JsonSchema}, - Address, Config, Context, Registry, Result, TcpStream, + prelude::*, registry::NetFactory, Address, Context, Registry, Result, TcpStream, }; -use serde_derive::{Deserialize, Serialize}; mod http_simple; mod obfs_net; @@ -38,7 +35,8 @@ pub trait Obfs { fn tcp_accept(&self, tcp: TcpStream, addr: SocketAddr) -> Result; } -#[derive(Debug, Serialize, Deserialize, Config, JsonSchema)] +#[rd_config] +#[derive(Debug)] #[serde(rename_all = "snake_case", tag = "obfs_type")] pub enum ObfsType { HttpSimple(http_simple::HttpSimple), diff --git a/protocol/obfs/src/obfs_net.rs b/protocol/obfs/src/obfs_net.rs index dad0691a..8d6d9b65 100644 --- a/protocol/obfs/src/obfs_net.rs +++ b/protocol/obfs/src/obfs_net.rs @@ -2,17 +2,14 @@ use std::net::SocketAddr; use crate::{Obfs, ObfsType}; use rd_interface::{ - async_trait, - registry::NetRef, - schemars::{self, JsonSchema}, - Address, Arc, Config, Context, INet, ITcpListener, IntoDyn, Net, Result, TcpListener, - TcpStream, UdpSocket, NOT_IMPLEMENTED, + async_trait, prelude::*, registry::NetRef, Address, Arc, Context, INet, ITcpListener, IntoDyn, + Net, Result, TcpListener, TcpStream, UdpSocket, NOT_IMPLEMENTED, }; -use serde_derive::{Deserialize, Serialize}; type BoxObfs = Arc; -#[derive(Debug, Serialize, Deserialize, Config, JsonSchema)] +#[rd_config] +#[derive(Debug)] pub struct ObfsNetConfig { #[serde(default)] pub net: NetRef, diff --git a/protocol/obfs/src/plain.rs b/protocol/obfs/src/plain.rs index 20da44b3..ea386944 100644 --- a/protocol/obfs/src/plain.rs +++ b/protocol/obfs/src/plain.rs @@ -1,11 +1,8 @@ use crate::Obfs; -use rd_interface::{ - schemars::{self, JsonSchema}, - Address, Config, Result, TcpStream, -}; -use serde_derive::{Deserialize, Serialize}; +use rd_interface::{prelude::*, Address, Result, TcpStream}; -#[derive(Debug, Serialize, Deserialize, Config, JsonSchema)] +#[rd_config] +#[derive(Debug)] pub struct Plain; impl Obfs for Plain { diff --git a/protocol/raw/Cargo.toml b/protocol/raw/Cargo.toml index 92c153a8..c9550231 100644 --- a/protocol/raw/Cargo.toml +++ b/protocol/raw/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [dependencies] rd-interface = { path = "../../rabbit-digger/rd-interface/", version = "0.4" } # rd-interface = "0.3" -serde_derive = "1.0" serde = "1.0" tracing = "0.1.26" tokio-smoltcp = "0.1.13" diff --git a/protocol/raw/src/net.rs b/protocol/raw/src/net.rs index d3caca14..3d629b5a 100644 --- a/protocol/raw/src/net.rs +++ b/protocol/raw/src/net.rs @@ -5,17 +5,13 @@ use crate::{ wrap::{TcpListenerWrap, TcpStreamWrap, UdpSocketWrap}, }; use rd_interface::{ - async_trait, - registry::NetFactory, - schemars::{self, JsonSchema}, - Address, Config, Context, Error, INet, IntoDyn, Result, + async_trait, prelude::*, registry::NetFactory, Address, Context, Error, INet, IntoDyn, Result, }; -use serde_derive::{Deserialize, Serialize}; use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr}; use tokio::sync::Mutex; use tokio_smoltcp::{device::FutureDevice, BufferSize, Net, NetConfig}; -#[derive(Serialize, Deserialize, JsonSchema, Config)] +#[rd_config] pub struct RawNetConfig { device: String, mtu: usize, diff --git a/protocol/raw/src/server.rs b/protocol/raw/src/server.rs index 51bb9800..83c592b9 100644 --- a/protocol/raw/src/server.rs +++ b/protocol/raw/src/server.rs @@ -7,15 +7,9 @@ use std::{ use futures::{future::ready, StreamExt}; use lru_time_cache::LruCache; use rd_interface::{ - async_trait, - constant::UDP_BUFFER_SIZE, - error::map_other, - registry::ServerFactory, - schemars::{self, JsonSchema}, - util::connect_tcp, - Config, Context, Error, IServer, IntoAddress, Net, Result, + async_trait, constant::UDP_BUFFER_SIZE, error::map_other, prelude::*, registry::ServerFactory, + util::connect_tcp, Context, Error, IServer, IntoAddress, Net, Result, }; -use serde_derive::{Deserialize, Serialize}; use smoltcp::{ phy::Checksum, wire::{ @@ -42,7 +36,7 @@ use crate::{ gateway::{GatewayInterface, MapTable}, }; -#[derive(Serialize, Deserialize, JsonSchema, Config)] +#[rd_config] pub struct RawServerConfig { device: String, mtu: usize, diff --git a/protocol/remote/Cargo.toml b/protocol/remote/Cargo.toml index 42728983..dc08d7ea 100644 --- a/protocol/remote/Cargo.toml +++ b/protocol/remote/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [dependencies] rd-interface = { path = "../../rabbit-digger/rd-interface/", version = "0.4" } # rd-interface = "0.3" -serde_derive = "1.0" serde = "1.0" tracing = "0.1.26" tokio = { version = "1.5.0", features = ["rt"] } diff --git a/protocol/remote/src/lib.rs b/protocol/remote/src/lib.rs index abd07518..b5fa0014 100644 --- a/protocol/remote/src/lib.rs +++ b/protocol/remote/src/lib.rs @@ -1,18 +1,17 @@ use net::RemoteNet; use protocol::get_protocol; use rd_interface::{ + prelude::*, registry::{NetFactory, NetRef, ServerFactory}, - schemars::{self, JsonSchema}, - Config, Net, Registry, Result, + Net, Registry, Result, }; -use serde_derive::Deserialize; use server::RemoteServer; mod net; mod protocol; mod server; -#[derive(Deserialize, JsonSchema, Config)] +#[rd_config] pub struct RemoteNetConfig { #[serde(default)] net: NetRef, diff --git a/protocol/remote/src/protocol.rs b/protocol/remote/src/protocol.rs index 26495143..aa761f29 100644 --- a/protocol/remote/src/protocol.rs +++ b/protocol/remote/src/protocol.rs @@ -1,22 +1,19 @@ use std::net::SocketAddr; use rd_interface::{ - async_trait, - schemars::{self, JsonSchema}, - Address, Arc, Config, Context, Error, Net, Result, TcpListener, TcpStream, + async_trait, prelude::*, Address, Arc, Context, Error, Net, Result, TcpListener, TcpStream, }; -use serde_derive::{Deserialize, Serialize}; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::sync::RwLock; -#[derive(Deserialize, JsonSchema, Config)] +#[rd_config] #[serde(tag = "mode", rename_all = "lowercase")] pub enum Connection { Active { remote: Address }, Passive { bind: Address }, } -#[derive(Deserialize, JsonSchema, Config)] +#[rd_config] #[schemars(rename = "RemoteProtocolConfig")] pub struct Config { #[serde(flatten)] @@ -118,14 +115,16 @@ async fn handshake(channel: &mut TcpStream, token: &str) -> Result<()> { Ok(()) } -#[derive(Debug, Serialize, Deserialize)] +#[rd_config] +#[derive(Debug)] pub enum CommandRequest { TcpConnect { address: Address }, TcpBind { address: Address }, TcpAccept { id: u32 }, } -#[derive(Debug, Serialize, Deserialize)] +#[rd_config] +#[derive(Debug)] pub enum CommandResponse { Accept { id: u32, addr: SocketAddr }, BindAddr { addr: SocketAddr }, diff --git a/protocol/ss/Cargo.toml b/protocol/ss/Cargo.toml index b3d13196..c69164c9 100644 --- a/protocol/ss/Cargo.toml +++ b/protocol/ss/Cargo.toml @@ -8,7 +8,6 @@ edition = "2018" rd-interface = { path = "../../rabbit-digger/rd-interface/", version = "0.4" } # rd-interface = "0.3" shadowsocks = { version = "1.10.3", features = [ "stream-cipher", "aead-cipher-extra" ] } -serde_derive = "1.0" serde = "1.0" bytes = "1.0" tracing = "0.1.26" diff --git a/protocol/ss/src/client.rs b/protocol/ss/src/client.rs index c1e944d0..1bd043d4 100644 --- a/protocol/ss/src/client.rs +++ b/protocol/ss/src/client.rs @@ -1,19 +1,16 @@ use super::wrapper::{Cipher, WrapAddress, WrapSSTcp, WrapSSUdp}; use rd_interface::{ - async_trait, - registry::NetRef, - schemars::{self, JsonSchema}, - Address, Arc, Config, INet, IntoAddress, IntoDyn, Result, TcpListener, TcpStream, UdpSocket, - NOT_ENABLED, NOT_IMPLEMENTED, + async_trait, prelude::*, registry::NetRef, Address, Arc, INet, IntoAddress, IntoDyn, Result, + TcpListener, TcpStream, UdpSocket, NOT_ENABLED, NOT_IMPLEMENTED, }; -use serde_derive::Deserialize; use shadowsocks::{ config::{ServerConfig, ServerType}, context::Context, ProxyClientStream, }; -#[derive(Debug, Deserialize, Clone, Config, JsonSchema)] +#[rd_config] +#[derive(Debug, Clone)] pub struct SSNetConfig { server: Address, password: String, diff --git a/protocol/ss/src/server.rs b/protocol/ss/src/server.rs index 522b7ba7..1cf30074 100644 --- a/protocol/ss/src/server.rs +++ b/protocol/ss/src/server.rs @@ -2,16 +2,13 @@ use std::net::SocketAddr; use super::wrapper::{Cipher, CryptoStream}; use rd_interface::{ - async_trait, - schemars::{self, JsonSchema}, - util::connect_tcp, - Address, Arc, Config, IServer, Net, Result, TcpStream, + async_trait, prelude::*, util::connect_tcp, Address, Arc, IServer, Net, Result, TcpStream, }; -use serde_derive::Deserialize; use shadowsocks::{config::ServerType, context::Context, ServerConfig}; use socks5_protocol::Address as S5Addr; -#[derive(Debug, Deserialize, Clone, Config, JsonSchema)] +#[rd_config] +#[derive(Debug, Clone)] pub struct SSServerConfig { bind: Address, password: String, diff --git a/protocol/ss/src/wrapper.rs b/protocol/ss/src/wrapper.rs index 7fb3ca15..1358f35c 100644 --- a/protocol/ss/src/wrapper.rs +++ b/protocol/ss/src/wrapper.rs @@ -1,12 +1,9 @@ use crate::udp::{decrypt_payload, encrypt_payload}; use bytes::BytesMut; use rd_interface::{ - async_trait, impl_async_read_write, impl_empty_net_resolve, - schemars::{self, JsonSchema}, - Address as RDAddress, AsyncRead, AsyncWrite, ITcpStream, IUdpSocket, ReadBuf, TcpStream, - UdpSocket, NOT_IMPLEMENTED, + async_trait, impl_async_read_write, prelude::*, Address as RDAddress, AsyncRead, AsyncWrite, + ITcpStream, IUdpSocket, ReadBuf, TcpStream, UdpSocket, NOT_IMPLEMENTED, }; -use serde_derive::{Deserialize, Serialize}; use shadowsocks::{ context::SharedContext, crypto::v1::CipherKind, @@ -32,8 +29,9 @@ impl From for SSAddress { } } +#[rd_config] #[allow(non_camel_case_types)] -#[derive(Debug, Copy, Clone, Serialize, Deserialize, JsonSchema)] +#[derive(Debug, Copy, Clone)] pub enum Cipher { #[serde(rename = "none")] NONE, @@ -127,8 +125,6 @@ pub enum Cipher { SM4_CCM, } -impl_empty_net_resolve! { Cipher } - impl From for CipherKind { fn from(c: Cipher) -> Self { let s: serde_json::Value = diff --git a/protocol/trojan/Cargo.toml b/protocol/trojan/Cargo.toml index 7b700128..6aae2340 100644 --- a/protocol/trojan/Cargo.toml +++ b/protocol/trojan/Cargo.toml @@ -6,7 +6,6 @@ edition = "2018" [dependencies] rd-interface = { path = "../../rabbit-digger/rd-interface/", version = "0.4" } -serde_derive = "1.0" serde = "1.0" tracing = "0.1.26" sha2 = "0.9.5" diff --git a/protocol/trojan/src/client.rs b/protocol/trojan/src/client.rs index f95cbd3f..87fff37a 100644 --- a/protocol/trojan/src/client.rs +++ b/protocol/trojan/src/client.rs @@ -2,13 +2,9 @@ use std::io::{Cursor, Write}; use crate::tls::{TlsConnector, TlsConnectorConfig}; use rd_interface::{ - async_trait, - registry::NetRef, - schemars::{self, JsonSchema}, - Address as RdAddress, Address, Config, INet, IntoDyn, Net, Result, TcpListener, TcpStream, - UdpSocket, NOT_ENABLED, NOT_IMPLEMENTED, + async_trait, prelude::*, registry::NetRef, Address as RdAddress, Address, INet, IntoDyn, Net, + Result, TcpListener, TcpStream, UdpSocket, NOT_ENABLED, NOT_IMPLEMENTED, }; -use serde_derive::Deserialize; use sha2::{Digest, Sha224}; use socks5_protocol::{sync::FromIO, Address as S5Addr}; @@ -42,7 +38,8 @@ impl TrojanNet { } } -#[derive(Debug, Deserialize, Clone, Config, JsonSchema)] +#[rd_config] +#[derive(Debug, Clone)] pub struct TrojanNetConfig { #[serde(default)] net: NetRef, diff --git a/rabbit-digger b/rabbit-digger index 1b52be4e..d9c3b75d 160000 --- a/rabbit-digger +++ b/rabbit-digger @@ -1 +1 @@ -Subproject commit 1b52be4ead4b874589514a879ad6241b8057c3df +Subproject commit d9c3b75d8c3362dcf09d316edf5a1657f3ec5b9c diff --git a/src/api_server/reject.rs b/src/api_server/reject.rs index 457f4155..48b734cc 100644 --- a/src/api_server/reject.rs +++ b/src/api_server/reject.rs @@ -1,4 +1,4 @@ -use serde_derive::Serialize; +use serde::Serialize; use warp::{hyper::StatusCode, Rejection, Reply}; #[derive(Debug)] diff --git a/src/config.rs b/src/config.rs index 78a29d3d..71bf146a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,6 @@ use anyhow::{Context, Result}; use rabbit_digger::Config; -use serde_derive::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use serde_json::Value; use std::path::PathBuf; diff --git a/src/select.rs b/src/select.rs index 81ef415d..cad08aec 100644 --- a/src/select.rs +++ b/src/select.rs @@ -1,13 +1,12 @@ use rd_interface::{ async_trait, + prelude::*, registry::{NetFactory, NetRef}, - schemars::{self, JsonSchema}, - Address, Config, Context, Error, INet, Net, Registry, Result, TcpListener, TcpStream, - UdpSocket, + Address, Context, Error, INet, Net, Registry, Result, TcpListener, TcpStream, UdpSocket, }; -use serde_derive::{Deserialize, Serialize}; -#[derive(Debug, Serialize, Deserialize, Clone, Config, JsonSchema)] +#[rd_config] +#[derive(Debug, Clone)] pub struct SelectNetConfig { selected: usize, list: Vec, diff --git a/src/translate/clash.rs b/src/translate/clash.rs index 95d16324..7c7efd55 100644 --- a/src/translate/clash.rs +++ b/src/translate/clash.rs @@ -9,7 +9,7 @@ use rabbit_digger::{ }, util::topological_sort, }; -use serde_derive::Deserialize; +use serde::Deserialize; use serde_json::{from_value, json, Value}; #[derive(Debug, Deserialize)]