go-libp2p-core icon indicating copy to clipboard operation
go-libp2p-core copied to clipboard

peer.ID does not work as map key in JSON maps

Open hsanjuan opened this issue 5 years ago • 2 comments

Since peer.IDs defines themselves as str, defining a map[peer.ID]<type> and marshaling that to JSON does not make use of the MarshalText() facility to encode the map keys. Somehow default encoding/decoding when doing it doesn't work (it decodes peers with different IDs but doesn't complain, which is worse).

See https://github.com/golang/go/issues/28827

Probably doing the same thing as cids and switching to type ID struct { str string } would fix this.

However, this might be very breaking because people rely on doing pid1 == pid2 (and I think that would stop working, at least from outside this package? it is not clear from the Go documentation).

Thoughts?

hsanjuan avatar Feb 27 '19 16:02 hsanjuan

Let's not change that, the pid1 == pid2 test is prevalent in the codebase.

vyzo avatar Feb 28 '19 07:02 vyzo

pid1 == pid2 would still work with type ID struct { str string }. The only issue would be pid1 == "" (which we do use) but I can live with that.

Stebalien avatar Feb 28 '19 20:02 Stebalien