Skip to content

rustdoc-json-types: Inconsitant #[derive(s #96189

Closed
@aDotInTheVoid

Description

@aDotInTheVoid
  • #[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 and Abi
  • #[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 and Deserialize
  • Clone and Debug are both super usefull, and I think everything should also Implement these, although it isn't required 1
  • Id needs Hash, Eq and PartialEq to be used as a HashMap key

The medium ones

  • PartialEq for everything. It has clear semantics, and if we do rustdoc-json: replace jsondocck with jsondocckng #94140, it's essensial
  • Eq for everything. If we do PartialEq, we may as well do this,
  • Hash for almost everything. Currently Item and Crate cannot do this because they have HashMaps. If we realy wanted to, we could replace these with BTreeMap, but that would mean Ord for Id and possible slower perf. Theirs alot of things that make sense to put in a HashMap/HashSet key, and I thing just not having Item and Crate is fine. (I The fact that Type didn't implement Hash 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

  1. In practice, we depend on Clone for Item, which means basicly everything else needs to be Clone, but I'm almost certain this can be removed

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-rustdoc-jsonArea: Rustdoc JSON backendT-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions