package main
import (
+ "encoding/json"
"errors"
"expvar"
"fmt"
return nil
}),
args.Subcommand(
- "spew-bencoding",
+ "bencode",
func(p args.SubCmdCtx) error {
+ var print func(interface{}) error
+ if !p.Parse(
+ args.Subcommand("json", func(ctx args.SubCmdCtx) (err error) {
+ ctx.Parse()
+ je := json.NewEncoder(os.Stdout)
+ je.SetIndent("", " ")
+ print = je.Encode
+ return nil
+ }),
+ args.Subcommand("spew", func(ctx args.SubCmdCtx) (err error) {
+ ctx.Parse()
+ config := spew.NewDefaultConfig()
+ config.DisableCapacities = true
+ config.Indent = " "
+ print = func(v interface{}) error {
+ config.Dump(v)
+ return nil
+ }
+ return nil
+ }),
+ ).RanSubCmd {
+ return errors.New("an output type is required")
+ }
d := bencode.NewDecoder(os.Stdin)
- for i := 0; ; i++ {
- var v interface{}
- err := d.Decode(&v)
- if err == io.EOF {
- break
- }
- if err != nil {
- return fmt.Errorf("decoding message index %d: %w", i, err)
+ p.Defer(func() error {
+ for i := 0; ; i++ {
+ var v interface{}
+ err := d.Decode(&v)
+ if err == io.EOF {
+ break
+ }
+ if err != nil {
+ return fmt.Errorf("decoding message index %d: %w", i, err)
+ }
+ print(v)
}
- spew.Dump(v)
- }
+ return nil
+ })
return nil
},
args.Help("reads bencoding from stdin into Go native types and spews the result"),
crawshaw.io/sqlite v0.3.3-0.20210127221821-98b1f83c5508
github.com/RoaringBitmap/roaring v0.9.4
github.com/alexflint/go-arg v1.4.2
- github.com/anacrolix/args v0.1.1-0.20211020052733-53ed238acbd4
+ github.com/anacrolix/args v0.3.0
github.com/anacrolix/chansync v0.3.0-0.0.20211007004133-3f72684c4a93
github.com/anacrolix/confluence v1.8.0 // indirect
github.com/anacrolix/dht/v2 v2.10.6-0.20211007004332-99263ec9c1c8
github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw=
github.com/alexflint/go-scalar v1.1.0 h1:aaAouLLzI9TChcPXotr6gUhq+Scr8rl0P9P4PnltbhM=
github.com/alexflint/go-scalar v1.1.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o=
-github.com/anacrolix/args v0.1.1-0.20211020052733-53ed238acbd4 h1:s6KNsoIo4VlU5fqoTVczWqDyM163HzyqoPY0hQJS+9U=
-github.com/anacrolix/args v0.1.1-0.20211020052733-53ed238acbd4/go.mod h1:41JBnF8sKExNVLHPkCdL74jkZc3dSxAkGsk1TuKOUFI=
+github.com/anacrolix/args v0.2.1-0.20211103024302-00380c7cbbec h1:gHr2HG2wRaEQkoDif7ic59iQZsEBeWfa6j+4I4Obj+8=
+github.com/anacrolix/args v0.2.1-0.20211103024302-00380c7cbbec/go.mod h1:41JBnF8sKExNVLHPkCdL74jkZc3dSxAkGsk1TuKOUFI=
+github.com/anacrolix/args v0.3.0 h1:rM2/mjp0b+JXvv5emEL9jm0uBAa8+380iihM3Ynhm0E=
+github.com/anacrolix/args v0.3.0/go.mod h1:41JBnF8sKExNVLHPkCdL74jkZc3dSxAkGsk1TuKOUFI=
github.com/anacrolix/chansync v0.0.0-20210524073341-a336ebc2de92/go.mod h1:DZsatdsdXxD0WiwcGl0nJVwyjCKMDv+knl1q2iBjA2k=
github.com/anacrolix/chansync v0.3.0-0.0.20211007004133-3f72684c4a93 h1:sQ8igc3anitrtKPEHRK+RBvuNZP0+DRAa6jskKlq4+k=
github.com/anacrolix/chansync v0.3.0-0.0.20211007004133-3f72684c4a93/go.mod h1:DZsatdsdXxD0WiwcGl0nJVwyjCKMDv+knl1q2iBjA2k=