This example with Serialize
works:
extern crate serde; // 1.0.70
#[macro_use]
extern crate serde_derive; // 1.0.70
pub trait MyTrait: serde::Serialize + std::fmt::Debug {}
impl <T: serde::Serialize + std::fmt::Debug> MyTrait for T {}
#[derive(Serialize)]
pub enum MyType<T>
where T: MyTrait
{
Xxx(T)
}
fn main() {
let _ = MyType::Xxx(12);
}
but almost same example with Deserialize
doesn’t:
extern crate serde; // 1.0.70
#[macro_use]
extern crate serde_derive; // 1.0.70
pub trait MyTrait: serde::de::DeserializeOwned + std::fmt::Debug {}
impl <T: serde::de::DeserializeOwned + std::fmt::Debug> MyTrait for T {}
#[derive(Deserialize)]
pub enum MyType<T>
where T: MyTrait
{
Xxx(T)
}
fn main() {
let _ = MyType::Xxx(12);
}
error:
error[E0283]: type annotations required: cannot resolve `T: serde::Deserialize<'de>`
--> src/main.rs:8:10
|
8 | #[derive(Deserialize)]
| ^^^^^^^^^^^
|
= note: required by `serde::Deserialize`
Please help needed. Thnak you.