[librsvg: 37/51] displacement_map.rs: impl Parse for ColorChannel instead of using a custom method



commit bbd9c562cdde7fe516df9ee890c5e055b6c297b6
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Dec 18 10:19:35 2019 -0600

    displacement_map.rs: impl Parse for ColorChannel instead of using a custom method

 rsvg_internals/src/filters/displacement_map.rs | 32 +++++++++++++++-----------
 1 file changed, 18 insertions(+), 14 deletions(-)
---
diff --git a/rsvg_internals/src/filters/displacement_map.rs b/rsvg_internals/src/filters/displacement_map.rs
index 05e4edb7..ed8eac8e 100644
--- a/rsvg_internals/src/filters/displacement_map.rs
+++ b/rsvg_internals/src/filters/displacement_map.rs
@@ -1,10 +1,11 @@
 use cairo::{self, ImageSurface};
-use markup5ever::{expanded_name, local_name, namespace_url, ns, QualName};
+use cssparser::Parser;
+use markup5ever::{expanded_name, local_name, namespace_url, ns};
 
 use crate::drawing_ctx::DrawingCtx;
 use crate::error::*;
 use crate::node::{NodeResult, NodeTrait, RsvgNode};
-use crate::parsers;
+use crate::parsers::{self, Parse, ParseValue};
 use crate::property_bag::PropertyBag;
 use crate::surface_utils::{iterators::Pixels, shared_surface::SharedImageSurface};
 
@@ -52,12 +53,14 @@ impl NodeTrait for FeDisplacementMap {
         for (attr, value) in pbag.iter() {
             match attr.expanded() {
                 expanded_name!(svg "in2") => self.in2 = Some(Input::parse(attr, value)?),
-                expanded_name!(svg "scale") => self.scale = parsers::number(value).attribute(attr)?,
+                expanded_name!(svg "scale") => {
+                    self.scale = parsers::number(value).attribute(attr)?
+                }
                 expanded_name!(svg "xChannelSelector") => {
-                    self.x_channel_selector = ColorChannel::parse(attr, value)?
+                    self.x_channel_selector = attr.parse(value)?
                 }
                 expanded_name!(svg "yChannelSelector") => {
-                    self.y_channel_selector = ColorChannel::parse(attr, value)?
+                    self.y_channel_selector = attr.parse(value)?
                 }
                 _ => (),
             }
@@ -143,14 +146,15 @@ impl FilterEffect for FeDisplacementMap {
     }
 }
 
-impl ColorChannel {
-    fn parse(attr: QualName, s: &str) -> Result<Self, NodeError> {
-        match s {
-            "R" => Ok(ColorChannel::R),
-            "G" => Ok(ColorChannel::G),
-            "B" => Ok(ColorChannel::B),
-            "A" => Ok(ColorChannel::A),
-            _ => Err(ValueErrorKind::parse_error("invalid value")).attribute(attr),
-        }
+impl Parse for ColorChannel {
+    fn parse<'i>(parser: &mut Parser<'i, '_>) -> Result<ColorChannel, ValueErrorKind> {
+        parse_identifiers!(
+            parser,
+            "R" => ColorChannel::R,
+            "G" => ColorChannel::G,
+            "B" => ColorChannel::B,
+            "A" => ColorChannel::A,
+        )
+        .map_err(|_: ParseError| ValueErrorKind::parse_error("parse error"))
     }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]