Most of the time this method will be used with a constant and the error will be thrown away anyway. By not returning an error we can use this function to initialize global variables. The function EncoderByName should be used when working with user provided input and we care about the error.
56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package multibase
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// Encoder is a multibase encoding that is verified to be supported and
|
|
// supports an Encode method that does not return an error
|
|
type Encoder struct {
|
|
enc Encoding
|
|
}
|
|
|
|
// NewEncoder create a new Encoder from an Encoding. It will panic is
|
|
// the encoding is invalid. To check for a valid encoding use the
|
|
// EncodingToStr map.
|
|
func NewEncoder(base Encoding) Encoder {
|
|
_, ok := EncodingToStr[base]
|
|
if !ok {
|
|
panic(fmt.Errorf("Unsupported multibase encoding: %d", base))
|
|
}
|
|
return Encoder{base}
|
|
}
|
|
|
|
// EncoderByName creates an encoder from a string, the string can
|
|
// either be the multibase name or single character multibase prefix
|
|
func EncoderByName(str string) (Encoder, error) {
|
|
var base Encoding
|
|
ok := true
|
|
if len(str) == 0 {
|
|
return Encoder{-1}, fmt.Errorf("Empty multibase encoding")
|
|
} else if len(str) == 1 {
|
|
base = Encoding(str[0])
|
|
_, ok = EncodingToStr[base]
|
|
} else {
|
|
base, ok = Encodings[str]
|
|
}
|
|
if !ok {
|
|
return Encoder{-1}, fmt.Errorf("Unsupported multibase encoding: %s", str)
|
|
}
|
|
return Encoder{base}, nil
|
|
}
|
|
|
|
func (p Encoder) Encoding() Encoding {
|
|
return p.enc
|
|
}
|
|
|
|
// Encode encodes the multibase using the given Encoder.
|
|
func (p Encoder) Encode(data []byte) string {
|
|
str, err := Encode(p.enc, data)
|
|
if err != nil {
|
|
// should not happen
|
|
panic(err)
|
|
}
|
|
return str
|
|
}
|