mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-05 16:56:53 +08:00

对一般用户而言,还是需要使用Info等级 来了解一下 一般的 日志情况,等到使用熟练之后,且确认运行没有错误后, 可以自行调为 warning 来提升性能 发现 bubble包 还自己引入了 命令行参数,这十分不可取,所以我们还是直接使用其代码。 将其它包中 的 命令行参数 统一 移动 到 cmd/verysimple 中;tls lazy 特性因为还在 调试阶段,所以 命令行参数 仍然放到 v2ray_simple 包中。
75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
// Package utils provides general utilities.
|
|
package utils
|
|
|
|
import (
|
|
"flag"
|
|
"strings"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
// bufio.Reader 和 bytes.Buffer 都实现了 ByteReader
|
|
type ByteReader interface {
|
|
ReadByte() (byte, error)
|
|
Read(p []byte) (n int, err error)
|
|
}
|
|
|
|
// bytes.Buffer 实现了 ByteWriter
|
|
type ByteWriter interface {
|
|
WriteByte(byte) error
|
|
Write(p []byte) (n int, err error)
|
|
}
|
|
|
|
func IsFlagGiven(name string) bool {
|
|
found := false
|
|
flag.Visit(func(f *flag.Flag) {
|
|
if f.Name == name {
|
|
found = true
|
|
}
|
|
})
|
|
return found
|
|
}
|
|
|
|
//flag包有个奇葩的缺点, 没法一下子获取所有的已经配置的参数, 只能遍历;
|
|
// 如果我们有大量的参数需要判断是否给出过, 那么不如先提取到到map里。
|
|
//
|
|
// 实际上flag包的底层也是用的一个map, 但是它是私有的, 而且我们也不宜用unsafe暴露出来.
|
|
func GetActualFlags() (m map[string]*flag.Flag) {
|
|
m = make(map[string]*flag.Flag)
|
|
flag.Visit(func(f *flag.Flag) {
|
|
m[f.Name] = f
|
|
})
|
|
|
|
return
|
|
}
|
|
|
|
//移除 = "" 和 = false 的项
|
|
func GetPurgedTomlStr(v any) (string, error) {
|
|
buf := GetBuf()
|
|
defer PutBuf(buf)
|
|
if err := toml.NewEncoder(buf).Encode(v); err != nil {
|
|
return "", err
|
|
}
|
|
lines := strings.Split(buf.String(), "\n")
|
|
var sb strings.Builder
|
|
|
|
for _, l := range lines {
|
|
if !strings.HasSuffix(l, ` = ""`) && !strings.HasSuffix(l, ` = false`) {
|
|
|
|
sb.WriteString(l)
|
|
sb.WriteByte('\n')
|
|
}
|
|
}
|
|
return sb.String(), nil
|
|
|
|
}
|
|
|
|
func WrapFuncForPromptUI(f func(string) bool) func(string) error {
|
|
return func(s string) error {
|
|
if f(s) {
|
|
return nil
|
|
}
|
|
return ErrInvalidData
|
|
}
|
|
}
|