2014-11-04 23:51:11 -08:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/hex"
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
|
|
|
|
ma "github.com/jbenet/go-multiaddr"
|
2014-11-05 00:38:21 -08:00
|
|
|
manet "github.com/jbenet/go-multiaddr/net"
|
2014-11-04 23:51:11 -08:00
|
|
|
)
|
|
|
|
|
2014-11-05 00:38:21 -08:00
|
|
|
var formats = []string{"string", "bytes", "hex", "slice"}
|
2014-11-04 23:51:11 -08:00
|
|
|
var format string
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
flag.Usage = func() {
|
2014-11-05 00:38:21 -08:00
|
|
|
fmt.Fprintf(os.Stderr, "usage: %s [<multiaddr>]\n\nFlags:\n", os.Args[0])
|
2014-11-04 23:51:11 -08:00
|
|
|
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()
|
2014-11-05 00:38:21 -08:00
|
|
|
if len(args) == 0 {
|
|
|
|
maddrs, err := manet.InterfaceMultiaddrs()
|
|
|
|
if err != nil {
|
|
|
|
die(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
output(maddrs...)
|
|
|
|
return
|
2014-11-04 23:51:11 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
m, err := ma.NewMultiaddr(args[0])
|
|
|
|
if err != nil {
|
|
|
|
die(err)
|
|
|
|
}
|
|
|
|
|
2014-11-05 00:38:21 -08:00
|
|
|
output(m)
|
|
|
|
}
|
|
|
|
|
|
|
|
func output(ms ...ma.Multiaddr) {
|
|
|
|
for _, m := range ms {
|
|
|
|
fmt.Println(outfmt(m))
|
|
|
|
}
|
2014-11-04 23:51:11 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
func outfmt(m ma.Multiaddr) string {
|
|
|
|
switch format {
|
|
|
|
case "string":
|
|
|
|
return m.String()
|
2014-11-05 00:38:21 -08:00
|
|
|
case "slice":
|
2014-11-04 23:51:11 -08:00
|
|
|
return fmt.Sprintf("%v", m.Bytes())
|
2014-11-05 00:38:21 -08:00
|
|
|
case "bytes":
|
2014-11-04 23:51:11 -08:00
|
|
|
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)
|
|
|
|
}
|