Comments (6)
Yes, that is tracked in #4.
from erased-serde.
You need to provide a Serialize implementation for your trait object (impl serde::Serialize for Element). Something like this:
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
extern crate erased_serde;
trait Element: erased_serde::Serialize + Send + Sync {
/* ... */
}
impl serde::Serialize for Element {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
where S: serde::Serializer
{
self.erased_serialize(serializer).map_err(|err| {
serde::ser::Error::custom(err.to_string())
})
}
}
#[derive(Serialize)]
struct GlennPierce {
i: u8,
}
impl Element for GlennPierce {
/* ... */
}
#[derive(Serialize)]
struct Pipeline {
name: String,
elements: Vec<Box<Element>>,
}
fn main() {
let pipeline = Pipeline {
name: "glennpierce".to_owned(),
elements: vec![
Box::new(GlennPierce { i: 0 }),
Box::new(GlennPierce { i: 1 }),
],
};
println!("{}", serde_json::to_string(&pipeline).unwrap());
}
from erased-serde.
Thanks for this.
Although for this I get something like
error[E0277]: the trait bound GlennPierce: serde::ser::Serialize
is not satisfied
impl Element for GlennPierce {
| ^^^^^^^ the trait serde::ser::Serialize
is not implemented for `GlennPierce
Should not the GlennPierce struct implement the erased_serde::Serialize and not serde::Serialize ?
#[derive(Serialize)]
struct GlennPierce {
i: u8,
}
from erased-serde.
Make sure you are using serde 0.8 and serde_derive 0.8. This crate has not been updated to serde 0.9 yet.
from erased-serde.
Thanks. That did it.
from erased-serde.
Hi, I think I just came across this issue with serde 1.0.2. Are there any plans to update this crate?
from erased-serde.
Related Issues (20)
- Pick a different data format than `serde_cbor` to use in examples
- Add DynClone as a supertrait for Serialize (behind a feature flag?)
- Applying erased_serde::deserialize twice to same Deseralizer HOT 1
- Stabilizing erased-serde HOT 4
- Expose all traits within ser and de HOT 5
- Why is there no Deserialize trait and macro? HOT 2
- Invalid cast from alloc::string::String to alloc::string::String HOT 1
- Expected Box<dyn erased_serde::Serializer + 'static> HOT 1
- Stack overflow when using serialize_trait_object on trait that does not have Serialize as supertrait
- Broken HOT 1
- Lifetimed Generics no longer works HOT 1
- Will add Deserialize Trait? HOT 1
- Deserialize / DeserializeOwned ? HOT 2
- Implement `serde::Deserialize` on `Box<dyn MyTrait>` HOT 2
- Deeply nested structs consume quadratic stack space HOT 1
- mechanism for erasing a generic S: Serializer in a Serialize implementation? HOT 1
- Make `erased_serde::ser::Ok` public (since it's obtainable through public API) HOT 2
- Expose ser::erase::Serializer HOT 2
- Support `skip_field`
- Implement traits `Deserialize` and `DeserializeOwned` in the crate HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from erased-serde.