-
Notifications
You must be signed in to change notification settings - Fork 95
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
attributes serialization #49
Comments
Yea attributes are a weird thing. I'm not sure how to handle them. We could rename fields to something like |
Yep I think like in every library who manage XML ... It's still the same problem of naming. |
I agree, also was thinking about this approach to ensure roundtrips. Could avoid most annotations by using something like |
You mean to require adding |
@oli-obk I mean to avoid any annotations and instead use prefixes for struct fields (which is essentially the same, just perhaps more convenient). |
hmm.. I don't like that, because it exposes xml stuff to users of the struct who don't even care about xml |
Maybe... although author can still add annotations to rename it if it's a public structure / fields and not just for internal usage. |
Probably you already know of it, but here there's a nice overview of some of the most common mapping conventions for attributes (and namespaces). The main problem is, there's all kind of conventions. Maybe a plugin system to allow choosing one's preferred method would be best? |
I think an annotation would be a good choice. Maybe |
Serde has no support for such features. |
We'll also need to enforce that attribute-fields come before regular fields, because the serializer cannot look ahead. This is probably only doable with a runtime error though. |
So, may be like $value, but more complex |
@anton-dutov Wouldn't that also affect json serializaton because it's |
@Boscop Just for case where only xml (seri/deseri)lization used, on other cases modification of serde required
|
it's interesting @anton-dutov, in this formulation |
Continue discussion in #62 |
Hello guys, is this feature supported now? |
For anyone here in the future, this is implemented at least I am on
Anything renamed with the @ will map to an attribute, otherwise they will be treated as a child component. |
Note that the use serde::{Deserialize, Serialize};
use serde_xml_rs::{from_str, to_string};
#[derive(Debug, Serialize, Deserialize)]
pub struct Control {
name: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Layout {
#[serde(rename(serialize = "@height"))]
pub height: String,
#[serde(rename(serialize = "@width"))]
pub width: String,
#[serde(rename = "control")]
pub control: Control,
}
fn main() {
let xml = r#"
<Layout height="3" width="5">
<control>
<name>Hello World!</name>
</control>
</Layout>
"#;
let layout: Layout = from_str(xml).unwrap();
println!("{layout:#?}");
println!("{}", to_string(&layout).unwrap());
} will output:
|
Is there a way to serialize a HashMap to a series of Attributes? I can get the attributes deserialized into a HashMap.
But, no clue how to serialize that. Here's what I have in code:
Any ideas? I'm guessing it is actually
Kinda curious why it is trying to handle a PlainStringSerializer. |
How to serialise attributes on XML items ?
I d'ont see anything for that. Any suggestion ?
The text was updated successfully, but these errors were encountered: