From 5f35e6d949ab4db9847b15039a45a57daeec04e4 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Tue, 4 Nov 2014 23:51:11 -0800 Subject: [PATCH] multiaddr conversion tool --- multiaddr/multiaddr.go | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 multiaddr/multiaddr.go diff --git a/multiaddr/multiaddr.go b/multiaddr/multiaddr.go new file mode 100644 index 0000000..3fb6137 --- /dev/null +++ b/multiaddr/multiaddr.go @@ -0,0 +1,65 @@ +package main + +import ( + "encoding/hex" + "flag" + "fmt" + "os" + + ma "github.com/jbenet/go-multiaddr" +) + +var usage = `multiaddr conversion +usage: multiaddr [fmt] <>` + +var formats = []string{"string", "bytes", "hex", "raw"} +var format string + +func init() { + flag.Usage = func() { + fmt.Fprintf(os.Stderr, "usage: %s \n\nFlags:\n", os.Args[0]) + flag.PrintDefaults() + } + + usage := fmt.Sprintf("output format, one of: %v", formats) + flag.StringVar(&format, "format", "string", usage) + flag.StringVar(&format, "f", "string", usage+" (shorthand)") +} + +func main() { + flag.Parse() + args := flag.Args() + if len(args) != 1 { + die("error: can only take one argument") + } + + m, err := ma.NewMultiaddr(args[0]) + if err != nil { + die(err) + } + + fmt.Println(outfmt(m)) +} + +func outfmt(m ma.Multiaddr) string { + switch format { + case "string": + return m.String() + case "bytes": + return fmt.Sprintf("%v", m.Bytes()) + case "raw": + return string(m.Bytes()) + case "hex": + return "0x" + hex.EncodeToString(m.Bytes()) + } + + die("error: invalid format", format) + return "" +} + +func die(v ...interface{}) { + fmt.Fprint(os.Stderr, v...) + fmt.Fprint(os.Stderr, "\n") + flag.Usage() + os.Exit(-1) +}