Implement encoding.TextMarshaler to match unmarshaler for metainfo.Hash

Fixes https://github.com/anacrolix/torrent/issues/463
This commit is contained in:
Matt Joiner 2021-01-22 09:49:51 +11:00
parent 6aaaaaffba
commit 03b1abafb9
1 changed files with 9 additions and 4 deletions

View File

@ -12,10 +12,7 @@ const HashSize = 20
// 20-byte SHA1 hash used for info and pieces. // 20-byte SHA1 hash used for info and pieces.
type Hash [HashSize]byte type Hash [HashSize]byte
var ( var _ fmt.Formatter = (*Hash)(nil)
_ fmt.Formatter = (*Hash)(nil)
_ encoding.TextUnmarshaler = (*Hash)(nil)
)
func (h Hash) Format(f fmt.State, c rune) { 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 // 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 return
} }
var (
_ encoding.TextUnmarshaler = (*Hash)(nil)
_ encoding.TextMarshaler = Hash{}
)
func (h *Hash) UnmarshalText(b []byte) error { func (h *Hash) UnmarshalText(b []byte) error {
return h.FromHexString(string(b)) return h.FromHexString(string(b))
} }
func (h Hash) MarshalText() (text []byte, err error) {
return []byte(h.HexString()), nil
}
func NewHashFromHex(s string) (h Hash) { func NewHashFromHex(s string) (h Hash) {
err := h.FromHexString(s) err := h.FromHexString(s)