css_ast/functions/
dynamic_range_limit_mix_function.rs

1use css_parse::{CommaSeparated, Function, function_set};
2use csskit_derives::{Parse, Peek, ToCursors, ToSpan, Visitable};
3use csskit_proc_macro::syntax;
4
5function_set!(pub struct DynamicRangeLimitMixFunctionName "dynamic-range-limit-mix");
6
7/// <https://drafts.csswg.org/css-color-hdr-1/#dynamic-range-limit-mix>
8///
9/// ```text,ignore
10/// dynamic-range-limit-mix() = dynamic-range-limit-mix( [ <'dynamic-range-limit'> && <percentage [0,100]> ]#{2,} )
11/// ```
12#[derive(Parse, Peek, ToCursors, ToSpan, Visitable, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
14#[visit(self)]
15pub struct DynamicRangeLimitMixFunction<'a>(
16	Function<DynamicRangeLimitMixFunctionName, CommaSeparated<'a, DynamicRangeLimitMixFunctionParams<'a>>>,
17);
18
19#[syntax(" <'dynamic-range-limit'> && <percentage [0,100]> ")]
20#[derive(Parse, Peek, ToSpan, ToCursors, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
22pub struct DynamicRangeLimitMixFunctionParams<'a>;
23
24#[cfg(test)]
25mod tests {
26	use super::*;
27	use css_parse::{assert_parse, assert_parse_error};
28
29	#[test]
30	fn size_test() {
31		assert_eq!(std::mem::size_of::<DynamicRangeLimitMixFunction>(), 64);
32	}
33
34	#[test]
35	fn test_writes() {
36		assert_parse!(DynamicRangeLimitMixFunction, "dynamic-range-limit-mix(constrained 80%,standard 20%)");
37		assert_parse!(
38			DynamicRangeLimitMixFunction,
39			"dynamic-range-limit-mix(80% constrained,20% standard)",
40			"dynamic-range-limit-mix(constrained 80%,standard 20%)"
41		);
42		assert_parse!(DynamicRangeLimitMixFunction, "dynamic-range-limit-mix(constrained 8%,standard 2%)");
43		assert_parse!(DynamicRangeLimitMixFunction, "dynamic-range-limit-mix(constrained 8%,no-limit 2%)");
44		assert_parse!(
45			DynamicRangeLimitMixFunction,
46			"dynamic-range-limit-mix(dynamic-range-limit-mix(constrained 8%)2%,no-limit 2%)"
47		);
48	}
49
50	#[test]
51	fn test_errors() {
52		assert_parse_error!(DynamicRangeLimitMixFunction, "dynamic-range-limit-mix(constrained -1%, standard 20%)");
53		assert_parse_error!(DynamicRangeLimitMixFunction, "dynamic-range-limit-mix(constrained 200%, standard 20%)");
54		assert_parse_error!(
55			DynamicRangeLimitMixFunction,
56			"dynamic-range-limit-mix(dynamic-range-limit-mix(constrained 200%), standard 20%)"
57		);
58	}
59}