dtolnay / erased-serde

Type-erased Serialize, Serializer and Deserializer traits
Apache License 2.0
709 stars 36 forks source link

Generalize even more impls #73

Closed dtolnay closed 1 year ago

dtolnay commented 1 year ago

This PR is the serialization equivalent of the deserialization impl changes in #71.

fn assert_is_serializer<S: serde::Serializer>(_serializer: S) {}

fn do_thing(mut serializer: Box<dyn erased_serde::Serializer>) {
    assert_is_serializer(&mut *serializer);
}
error[E0597]: `*serializer` does not live long enough
 --> src/main.rs:4:26
  |
3 | fn do_thing(mut serializer: Box<dyn erased_serde::Serializer>) {
  |             -------------- binding `serializer` declared here
4 |     assert_is_serializer(&mut *serializer);
  |     ---------------------^^^^^^^^^^^^^^^^-
  |     |                    |
  |     |                    borrowed value does not live long enough
  |     argument requires that `*serializer` is borrowed for `'static`
5 | }
  | - `*serializer` dropped here while still borrowed

For more information about this error, try `rustc --explain E0597`.