From 03b1abafb9749a5a2f72b9facbba0d97081d985a Mon Sep 17 00:00:00 2001
From: Matt Joiner <anacrolix@gmail.com>
Date: Fri, 22 Jan 2021 09:49:51 +1100
Subject: [PATCH] Implement encoding.TextMarshaler to match unmarshaler for
 metainfo.Hash

Fixes https://github.com/anacrolix/torrent/issues/463
---
 metainfo/hash.go | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

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)
-- 
2.51.0