From: Matt Joiner <anacrolix@gmail.com>
Date: Thu, 21 Jan 2021 22:49:51 +0000 (+1100)
Subject: Implement encoding.TextMarshaler to match unmarshaler for metainfo.Hash
X-Git-Tag: v1.22.0~30
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=03b1abafb9749a5a2f72b9facbba0d97081d985a;p=btrtrc.git

Implement encoding.TextMarshaler to match unmarshaler for metainfo.Hash

Fixes https://github.com/anacrolix/torrent/issues/463
---

diff --git a/metainfo/hash.go b/metainfo/hash.go
index b2bab751..0e258f3d 100644
--- a/metainfo/hash.go
+++ b/metainfo/hash.go
@@ -12,10 +12,7 @@ const HashSize = 20
 // 20-byte SHA1 hash used for info and pieces.
 type Hash [HashSize]byte
 
-var (
-	_ fmt.Formatter            = (*Hash)(nil)
-	_ encoding.TextUnmarshaler = (*Hash)(nil)
-)
+var _ fmt.Formatter = (*Hash)(nil)
 
 func (h Hash) Format(f fmt.State, c rune) {
 	// TODO: I can't figure out a nice way to just override the 'x' rune, since it's meaningless
@@ -54,9 +51,17 @@ func (h *Hash) FromHexString(s string) (err error) {
 	return
 }
 
+var (
+	_ encoding.TextUnmarshaler = (*Hash)(nil)
+	_ encoding.TextMarshaler   = Hash{}
+)
+
 func (h *Hash) UnmarshalText(b []byte) error {
 	return h.FromHexString(string(b))
 }
+func (h Hash) MarshalText() (text []byte, err error) {
+	return []byte(h.HexString()), nil
+}
 
 func NewHashFromHex(s string) (h Hash) {
 	err := h.FromHexString(s)