libp2p / go-libp2p-core

Interfaces and abstractions that make up go-libp2p
Other
145 stars 75 forks source link

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

Open hsanjuan opened 5 years ago

hsanjuan commented 5 years ago

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?

vyzo commented 5 years ago

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

Stebalien commented 5 years ago

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.