代码拉取完成,页面将自动刷新
同步操作将从 tickbh/wmproxy 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
// Copyright 2022 - 2023 Wenmeng See the COPYRIGHT
// file at the top-level directory of this distribution.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// Author: tickbh
// -----
// Created Date: 2023/09/15 11:39:49
use std::{str::FromStr, io, fmt::Display};
use bitflags::bitflags;
use serde::{Serialize, Deserialize};
bitflags! {
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub struct Flag: u8 {
/// 使用HTTP代理类型
const HTTP = 0x1;
/// 使用HTTPS代理类型
const HTTPS = 0x2;
/// 使用SOCKS5代理类型
const SOCKS5 = 0x4;
/// 纯TCP转发
const TCP = 0x8;
/// 纯UDP转发
const UDP = 0x16;
}
}
impl Default for Flag {
fn default() -> Self {
Flag::HTTP | Flag::HTTPS | Flag::SOCKS5
}
}
impl Serialize for Flag {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer {
serializer.serialize_u8(self.bits())
}
}
impl<'a> Deserialize<'a> for Flag {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'a> {
let v = u8::deserialize(deserializer)?;
Ok(Flag::from_bits(v).unwrap_or(Flag::HTTP))
}
}
impl FromStr for Flag {
type Err=io::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
if s.len() == 0 {
return Err(io::Error::new(io::ErrorKind::InvalidInput, ""));
}
let vals = s.split_whitespace().collect::<Vec<&str>>();
let mut flag = Flag::empty();
for v in vals {
match v {
"http" | "HTTP" => {
flag.set(Flag::HTTP, true);
}
"https" | "HTTPS" => {
flag.set(Flag::HTTPS, true);
}
"socks5" | "SOCKS5" => {
flag.set(Flag::SOCKS5, true);
}
_ => {}
}
}
Ok(flag)
}
}
impl Display for Flag {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let mut value = String::new();
if self.contains(Flag::HTTP) {
value += "http";
}
if self.contains(Flag::HTTPS) {
if !value.is_empty() {
value += " https";
} else {
value += "https";
}
}
if self.contains(Flag::SOCKS5) {
if !value.is_empty() {
value += " socks5";
} else {
value += "socks5";
}
}
f.write_str(&value)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。