Closed
Description
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
: Most types#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
:Id
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
:Header
andAbi
#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)]
:Generics
These are mostly a consequence of how they are used internaly (eg Header
and Abi
have Hash
just because they used to be stored in a HashSet
, Generics
has Default
because we use it once in conversions
. We should aim to be more consistant and user facing in these traits.
What Traits I thing we should have and why?
The super clear ones:
- Everything obviously need's
Serialize
andDeserialize
Clone
andDebug
are both super usefull, and I think everything should also Implement these, although it isn't required 1Id
needsHash
,Eq
andPartialEq
to be used as aHashMap
key
The medium ones
PartialEq
for everything. It has clear semantics, and if we do rustdoc-json: replace jsondocck with jsondocckng #94140, it's essensialEq
for everything. If we doPartialEq
, we may as well do this,Hash
for almost everything. CurrentlyItem
andCrate
cannot do this because they haveHashMap
s. If we realy wanted to, we could replace these withBTreeMap
, but that would meanOrd
forId
and possible slower perf. Theirs alot of things that make sense to put in aHashMap
/HashSet
key, and I thing just not havingItem
andCrate
is fine. (I The fact thatType
didn't implementHash
was the reason I looked into this).
Things to drop
- I don't thing anything should implement
Default
, as I don't think it's usefull or clear.
cc @CraftSpider
@rustbot modify labels: +T-rustdoc +A-rustdoc-json
Footnotes
-
In practice, we depend on
Clone
forItem
, which means basicly everything else needs to beClone
, but I'm almost certain this can be removed ↩