serde-rs / serde

Serialization framework for Rust
https://serde.rs/
Apache License 2.0
8.81k stars 747 forks source link

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

Closed nchouba closed 1 month ago

nchouba commented 3 months ago

Hi, Would it make sense to add the below blanket implementation for Serialize? `Impl Serialize for T where T:Deref,

::Target:Serialize { } ` for example Serialize implementation is missing for Ref, the above would make it work.
dtolnay commented 1 month ago

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