From 03b1abafb9749a5a2f72b9facbba0d97081d985a Mon Sep 17 00:00:00 2001 From: Matt Joiner 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)