From 4545c4a7466fdaa786676f12ed62eeb4c83d2421 Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Tue, 23 Mar 2021 08:37:05 +0000 Subject: [PATCH] Bug 1681691 - Create a NonNegativePercentage type in values:specified. r=emilio Differential Revision: https://phabricator.services.mozilla.com/D109285 --- servo/components/style/values/specified/mod.rs | 2 +- .../style/values/specified/percentage.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/servo/components/style/values/specified/mod.rs b/servo/components/style/values/specified/mod.rs index 946bf3c2cc9c..6341d495d6c5 100644 --- a/servo/components/style/values/specified/mod.rs +++ b/servo/components/style/values/specified/mod.rs @@ -71,7 +71,7 @@ pub use self::list::Quotes; pub use self::motion::{OffsetPath, OffsetRotate}; pub use self::outline::OutlineStyle; pub use self::page::{Orientation, PageSize, PaperSize}; -pub use self::percentage::Percentage; +pub use self::percentage::{Percentage, NonNegativePercentage}; pub use self::position::AspectRatio; pub use self::position::{ GridAutoFlow, GridTemplateAreas, MasonryAutoFlow, Position, PositionOrAuto, diff --git a/servo/components/style/values/specified/percentage.rs b/servo/components/style/values/specified/percentage.rs index eac4d91cf8fb..c73616a3848d 100644 --- a/servo/components/style/values/specified/percentage.rs +++ b/servo/components/style/values/specified/percentage.rs @@ -7,6 +7,7 @@ use crate::parser::{Parse, ParserContext}; use crate::values::computed::percentage::Percentage as ComputedPercentage; use crate::values::computed::{Context, ToComputedValue}; +use crate::values::generics::NonNegative; use crate::values::specified::calc::CalcNode; use crate::values::specified::Number; use crate::values::{serialize_percentage, CSSFloat}; @@ -172,3 +173,16 @@ impl ToComputedValue for Percentage { } impl SpecifiedValueInfo for Percentage {} + +/// A wrapper of Percentage, whose value must be >= 0. +pub type NonNegativePercentage = NonNegative; + +impl Parse for NonNegativePercentage { + #[inline] + fn parse<'i, 't>( + context: &ParserContext, + input: &mut Parser<'i, 't>, + ) -> Result> { + Ok(NonNegative(Percentage::parse_non_negative(context, input)?)) + } +}