Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Serialize for T where T:Deref... #2720

Closed
nchouba opened this issue Mar 26, 2024 · 1 comment
Closed

Implement Serialize for T where T:Deref... #2720

nchouba opened this issue Mar 26, 2024 · 1 comment

Comments

@nchouba
Copy link

nchouba commented Mar 26, 2024

Hi,
Would it make sense to add the below blanket implementation for Serialize?
Impl Serialize for T where T:Deref, <T as Deref>::Target:Serialize { }
for example Serialize implementation is missing for Ref, the above would make it work.

@dtolnay
Copy link
Member

dtolnay commented May 15, 2024

This impl can't work because it would preclude implementing Serialize for any standard library types, many of which definitely need to have Serialize impls.

error[E0119]: conflicting implementations of trait `Serialize` for type `std::option::Option<_>`
   --> serde/src/ser/impls.rs:508:1
    |
91  | / impl<T> Serialize for Option<T>
92  | | where
93  | |     T: Serialize,
    | |_________________- first implementation here
...
508 | / impl<T> Serialize for T
509 | | where
510 | |     T: Deref,
511 | |     T::Target: Serialize,
    | |_________________________^ conflicting implementation for `std::option::Option<_>`
    |
    = note: upstream crates may add a new impl of trait `std::ops::Deref` for type `std::option::Option<_>` in future versions

@dtolnay dtolnay closed this as completed May 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants