-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
use std::borrow::Borrow;
use std::marker::PhantomData;
use epserde::prelude::*;
use epserde::Epserde;
#[derive(Epserde)]
pub struct OuterStruct<T: AsRef<[u64]>> {
data: T,
marker: PhantomData<T>,
}
fn main() {
let original = OuterStruct {
data: vec![1, 2, 3],
marker: PhantomData,
};
let mut file = std::io::Cursor::new(vec![]);
original.serialize(&mut file).expect("Could not serialize");
let data = file.into_inner();
let deserialized = <OuterStruct<Vec<u64>, >>::deserialize_eps(&data)
.expect("Could not deserialize");
}
errors with:
error[E0308]: `?` operator has incompatible types
--> epserde/examples/borrow.rs:7:10
|
7 | #[derive(Epserde)]
| ^^^^^^^ expected `PhantomData<<T as DeserializeInner>::DeserType<'_>>`, found `PhantomData<T>`
8 | pub struct OuterStruct<T: AsRef<[u64]>> {
| - found this type parameter
|
= note: `?` operator cannot convert from `PhantomData<T>` to `PhantomData<<T as epserde::deser::DeserializeInner>::DeserType<'deserialize_eps_inner_lifetime>>`
= note: expected struct `PhantomData<<T as epserde::deser::DeserializeInner>::DeserType<'deserialize_eps_inner_lifetime>>`
found struct `PhantomData<T>`
= note: you might be missing a type parameter or trait bound
= note: this error originates in the derive macro `Epserde` (in Nightly builds, run with -Z macro-backtrace for more info)
Removing either field fixes the error.
Metadata
Metadata
Assignees
Labels
No labels