Add deserialization helper
This commit is contained in:
parent
fa7ebd0825
commit
563b25f26f
2 changed files with 43 additions and 1 deletions
|
@ -30,6 +30,7 @@ pub struct ContainerStyle {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub border: Border,
|
pub border: Border,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
#[serde(alias = "corner_radius")]
|
||||||
pub corner_radii: CornerRadii,
|
pub corner_radii: CornerRadii,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub shadow: Option<Shadow>,
|
pub shadow: Option<Shadow>,
|
||||||
|
|
|
@ -70,7 +70,7 @@ pub struct Quad {
|
||||||
pub corner_radii: CornerRadii,
|
pub corner_radii: CornerRadii,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, Mul, Clone, Copy, Deserialize, Serialize, JsonSchema)]
|
#[derive(Default, Debug, Mul, Clone, Copy, Serialize, JsonSchema)]
|
||||||
pub struct CornerRadii {
|
pub struct CornerRadii {
|
||||||
pub top_left: f32,
|
pub top_left: f32,
|
||||||
pub top_right: f32,
|
pub top_right: f32,
|
||||||
|
@ -78,6 +78,47 @@ pub struct CornerRadii {
|
||||||
pub bottom_left: f32,
|
pub bottom_left: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for CornerRadii {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: serde::Deserializer<'de>,
|
||||||
|
{
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct CornerRadiiHelper {
|
||||||
|
pub top_left: f32,
|
||||||
|
pub top_right: f32,
|
||||||
|
pub bottom_right: f32,
|
||||||
|
pub bottom_left: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
enum RadiusOrRadii {
|
||||||
|
Radius(f32),
|
||||||
|
Radii(CornerRadiiHelper),
|
||||||
|
}
|
||||||
|
|
||||||
|
let json = RadiusOrRadii::deserialize(deserializer)?;
|
||||||
|
|
||||||
|
let result = match json {
|
||||||
|
RadiusOrRadii::Radius(radius) => CornerRadii::from(radius),
|
||||||
|
RadiusOrRadii::Radii(CornerRadiiHelper {
|
||||||
|
top_left,
|
||||||
|
top_right,
|
||||||
|
bottom_right,
|
||||||
|
bottom_left,
|
||||||
|
}) => CornerRadii {
|
||||||
|
top_left,
|
||||||
|
top_right,
|
||||||
|
bottom_right,
|
||||||
|
bottom_left,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<f32> for CornerRadii {
|
impl From<f32> for CornerRadii {
|
||||||
fn from(radius: f32) -> Self {
|
fn from(radius: f32) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue