Remove "magical" NewPrefix function, rename Prefix to Encoder.
This commit is contained in:
53
encoder.go
Normal file
53
encoder.go
Normal file
@@ -0,0 +1,53 @@
|
||||
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
|
||||
func NewEncoder(base Encoding) (Encoder, error) {
|
||||
_, ok := EncodingToStr[base]
|
||||
if !ok {
|
||||
return Encoder{-1}, fmt.Errorf("Unsupported multibase encoding: %d", base)
|
||||
}
|
||||
return Encoder{base}, nil
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
@@ -5,24 +5,17 @@ import (
|
||||
)
|
||||
|
||||
func TestInvalidPrefix(t *testing.T) {
|
||||
_, err := NewPrefix('q')
|
||||
_, err := NewEncoder('q')
|
||||
if err == nil {
|
||||
t.Error("expected failure")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrefix(t *testing.T) {
|
||||
prefix,err := NewPrefix(nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if prefix.Encoding() != Base58BTC {
|
||||
t.Error("unexpected default encoding")
|
||||
}
|
||||
for str, base := range Encodings {
|
||||
prefix,err = NewPrefix(base)
|
||||
prefix, err := NewEncoder(base)
|
||||
if err != nil {
|
||||
t.Fatalf("NewPrefix(%c) failed: %v", base, err)
|
||||
t.Fatalf("NewEncoder(%c) failed: %v", base, err)
|
||||
}
|
||||
str1, err := Encode(base, sampleBytes)
|
||||
if err != nil {
|
||||
@@ -32,9 +25,9 @@ func TestPrefix(t *testing.T) {
|
||||
if str1 != str2 {
|
||||
t.Errorf("encoded string mismatch: %s != %s", str1, str2)
|
||||
}
|
||||
_, err = NewPrefix(str)
|
||||
_, err = EncoderByName(str)
|
||||
if err != nil {
|
||||
t.Fatalf("NewPrefix(%s) failed: %v", str, err)
|
||||
t.Fatalf("NewEncoder(%s) failed: %v", str, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
64
prefix.go
64
prefix.go
@@ -1,64 +0,0 @@
|
||||
package multibase
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// Prefix is a multibase encoding that is verified to be supported and
|
||||
// supports an Encode method that does not return an error
|
||||
type Prefix struct {
|
||||
enc Encoding
|
||||
}
|
||||
|
||||
// NewPrefix create a new Prefix type from either an Encoding or a
|
||||
// string. If nil or an empty string the default base (currently
|
||||
// Base58BTC) will be used.
|
||||
func NewPrefix(e interface{}) (Prefix, error) {
|
||||
base := Encoding(Base58BTC)
|
||||
switch v := e.(type) {
|
||||
case byte:
|
||||
base = Encoding(v)
|
||||
case rune:
|
||||
base = Encoding(v)
|
||||
case int:
|
||||
base = Encoding(v)
|
||||
case Encoding:
|
||||
base = v
|
||||
case string:
|
||||
ok := true
|
||||
// note: if empty string use default value
|
||||
if len(v) == 1 {
|
||||
base = Encoding(v[0])
|
||||
_, ok = EncodingToStr[base]
|
||||
} else if len(v) > 1 {
|
||||
base, ok = Encodings[v]
|
||||
}
|
||||
if !ok {
|
||||
return Prefix{-1}, fmt.Errorf("Unsupported multibase encoding: %s", v)
|
||||
}
|
||||
return Prefix{base}, nil
|
||||
case nil:
|
||||
/* use default value */
|
||||
default:
|
||||
return Prefix{-1}, fmt.Errorf("Unsupported parameter type.")
|
||||
}
|
||||
_, ok := EncodingToStr[base]
|
||||
if !ok {
|
||||
return Prefix{-1}, fmt.Errorf("Unsupported multibase encoding: %d", base)
|
||||
}
|
||||
return Prefix{base}, nil
|
||||
}
|
||||
|
||||
func (p Prefix) Encoding() Encoding {
|
||||
return p.enc
|
||||
}
|
||||
|
||||
// Encode encodes the multibase using the given Prefix.
|
||||
func (p Prefix) Encode(data []byte) string {
|
||||
str, err := Encode(p.enc, data)
|
||||
if err != nil {
|
||||
// should not happen
|
||||
panic(err)
|
||||
}
|
||||
return str
|
||||
}
|
||||
Reference in New Issue
Block a user