@@ -30,6 +30,7 @@ pub struct ContainerStyle {
#[serde(default)]
pub border: Border,
#[serde(default)]
+ #[serde(alias = "corner_radius")]
pub corner_radii: CornerRadii,
#[serde(default)]
pub shadow: Option<Shadow>,
@@ -70,7 +70,7 @@ pub struct Quad {
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 top_left: f32,
pub top_right: f32,
@@ -78,6 +78,47 @@ pub struct CornerRadii {
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 {
fn from(radius: f32) -> Self {
Self {