From a0557075ec3c84e6dd18d13aca6596ca3a7ed689 Mon Sep 17 00:00:00 2001 From: Kevin Atkinson Date: Thu, 26 Jul 2018 12:50:11 -0400 Subject: [PATCH] Add prefix type that guarantees a valid multibase prefix. --- prefix.go | 28 ++++++++++++++++++++++++++++ prefix_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 prefix.go create mode 100644 prefix_test.go diff --git a/prefix.go b/prefix.go new file mode 100644 index 0000000..92ad4f8 --- /dev/null +++ b/prefix.go @@ -0,0 +1,28 @@ +package multibase + +import () + +type Prefix struct { + enc Encoding +} + +func NewPrefix(e Encoding) (Prefix, error) { + _, err := Encode(e, nil) + if err != nil { + return Prefix{-1}, err + } + return Prefix{e}, nil +} + +func (p Prefix) Encoding() Encoding { + return p.enc +} + +func (p Prefix) Encode(data []byte) string { + str, err := Encode(p.enc, data) + if err != nil { + // should not happen + panic(err) + } + return str +} diff --git a/prefix_test.go b/prefix_test.go new file mode 100644 index 0000000..e0214cd --- /dev/null +++ b/prefix_test.go @@ -0,0 +1,29 @@ +package multibase + +import ( + "testing" +) + +func TestInvalidPrefix(t *testing.T) { + _, err := NewPrefix('q') + if err == nil { + t.Error("expected failure") + } +} + +func TestPrefix(t *testing.T) { + for _, base := range Encodings { + prefix,err := NewPrefix(base) + if err != nil { + t.Fatalf("NewPrefix(%c) failed: %v", base, err) + } + str1, err := Encode(base, sampleBytes) + if err != nil { + t.Fatal(err) + } + str2 := prefix.Encode(sampleBytes) + if str1 != str2 { + t.Errorf("encoded string mismatch: %s != %s", str1, str2) + } + } +}