1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-09-20 02:46:10 -04:00
v2fly/main/commands/all/engineering/nonnativelinkextract.go
2023-11-26 10:55:27 +00:00

56 lines
1.3 KiB
Go

package engineering
import (
"flag"
"fmt"
"io"
"os"
"sort"
"strings"
"github.com/v2fly/v2ray-core/v5/app/subscription/entries/nonnative"
"github.com/v2fly/v2ray-core/v5/main/commands/base"
)
type valueContainer struct {
key, value string
}
type orderedValueContainer []valueContainer
func (o *orderedValueContainer) Len() int {
return len(*o)
}
func (o *orderedValueContainer) Less(i, j int) bool {
return strings.Compare((*o)[i].key, (*o)[j].key) < 0
}
func (o *orderedValueContainer) Swap(i, j int) {
(*o)[i], (*o)[j] = (*o)[j], (*o)[i]
}
var cmdNonNativeLinkExtract = &base.Command{
UsageLine: "{{.Exec}} engineering nonnativelinkextract",
Flag: func() flag.FlagSet {
fs := flag.NewFlagSet("", flag.ExitOnError)
return *fs
}(),
Run: func(cmd *base.Command, args []string) {
content, err := io.ReadAll(os.Stdin)
if err != nil {
base.Fatalf("%s", err)
}
flattenedLink := nonnative.ExtractAllValuesFromBytes(content)
var valueContainerOrdered orderedValueContainer
for key, value := range flattenedLink.Values {
valueContainerOrdered = append(valueContainerOrdered, valueContainer{key, value})
}
sort.Sort(&valueContainerOrdered)
for _, valueContainer := range valueContainerOrdered {
io.WriteString(os.Stdout, fmt.Sprintf("%s=%s\n", valueContainer.key, valueContainer.value))
}
},
}