nonnativelinkextract.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package engineering
  2. import (
  3. "flag"
  4. "fmt"
  5. "io"
  6. "os"
  7. "sort"
  8. "strings"
  9. "github.com/v2fly/v2ray-core/v5/app/subscription/entries/nonnative"
  10. "github.com/v2fly/v2ray-core/v5/main/commands/base"
  11. )
  12. type valueContainer struct {
  13. key, value string
  14. }
  15. type orderedValueContainer []valueContainer
  16. func (o *orderedValueContainer) Len() int {
  17. return len(*o)
  18. }
  19. func (o *orderedValueContainer) Less(i, j int) bool {
  20. return strings.Compare((*o)[i].key, (*o)[j].key) < 0
  21. }
  22. func (o *orderedValueContainer) Swap(i, j int) {
  23. (*o)[i], (*o)[j] = (*o)[j], (*o)[i]
  24. }
  25. var cmdNonNativeLinkExtract = &base.Command{
  26. UsageLine: "{{.Exec}} engineering nonnativelinkextract",
  27. Flag: func() flag.FlagSet {
  28. fs := flag.NewFlagSet("", flag.ExitOnError)
  29. return *fs
  30. }(),
  31. Run: func(cmd *base.Command, args []string) {
  32. content, err := io.ReadAll(os.Stdin)
  33. if err != nil {
  34. base.Fatalf("%s", err)
  35. }
  36. flattenedLink := nonnative.ExtractAllValuesFromBytes(content)
  37. var valueContainerOrdered orderedValueContainer
  38. for key, value := range flattenedLink.Values {
  39. valueContainerOrdered = append(valueContainerOrdered, valueContainer{key, value})
  40. }
  41. sort.Sort(&valueContainerOrdered)
  42. for _, valueContainer := range valueContainerOrdered {
  43. io.WriteString(os.Stdout, fmt.Sprintf("%s=%s\n", valueContainer.key, valueContainer.value))
  44. }
  45. },
  46. }