Question: how to apply deserialize_struct_case_insensitive to a struct?
I am a bit confused by deserialize_struct_case_insensitive. It is categorized as a container_attribute in serde-aux's docs. However, the example seems to show it used as a field attribute. If it is a container_attribute, should I be able to do something like this?
#[derive(PartialEq, Eq, PartialOrd, Ord, Deserialize)]
#[serde(deserialize_with = "deserialize_struct_case_insensitive")]
pub struct Manifest {
name: String,
version: String,
}
Hi @jlgerber ! Yes, the name is, unfortunately, confusing, I had plans to reorganise everything differently, but it is still yet to happen. And your thoughts are absolutely logical and correct and I apologise for having named it that way.
I'll see, perhaps, it is possible to rewrite it so that it can indeed be applied to a struct.
Thank you for the prompt reply.
Fortunately, I realized that i only really had to support keys with first letters capitalized so i used aliases.
You have still made a reasonable point. As I have wanted for so long to fix this, I now have another good reason for that. So, I'll close it and let you know once I do that.
Thank you for reaching out and contributing!
@vityafx - do you have any updates?
It seems to me that deserialize_with is a field only attribute, but it doesn't apply to the field itself, but to the struct of that field (assuming the field has a struct type).
I'm not sure how this would be possible to apply this to the parent struct
EDIT: arguably, using flatten, such as #[serde(flatten, deserialize_with = "deserialize_struct_case_insensitive")] could do the trick, but it's just a bit awkward having to declare an additional struct, then using flatten ...
It seems to me that deserialize_with is a field only attribute, but it doesn't apply to the field itself, but to the struct of that field (assuming the field has a struct type). That is correct.
I'm not sure how this would be possible to apply this to the parent struct I can't think of any way for this to happen.
I agree with the flatten thing. Unfortunately, there will be no other way possible for this, I think, with how the serde crate is written and what it allows to do.
What kind of an update were you looking for? Just renaming/reorganisation of the crate's content or, perhaps, anything else?
You had written before:
You have still made a reasonable point. As I have wanted for so long to fix this, I now have another good reason for that. So, I'll close it and let you know once I do that.
And I was hopeful, that maybe you had found a way to avoid using a nested struct. Or maybe your comment applied to clarifying the usage?
You had written before:
You have still made a reasonable point. As I have wanted for so long to fix this, I now have another good reason for that. So, I'll close it and let you know once I do that.
And I was hopeful, that maybe you had found a way to avoid using a nested struct. Or maybe your comment applied to clarifying the usage?
Yes, so unfortunately it was more, if not only, clarifying the situation and the absence of a good workaround.