go-libp2p-core
go-libp2p-core copied to clipboard
peer.ID does not work as map key in JSON maps
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?
Let's not change that, the pid1 == pid2 test is prevalent in the codebase.
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.