multiaddr.go 1.15 KB
Newer Older
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 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 <multiaddr>\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)
}