[librsvg] property_bag.rs: Implement parse_or_none(), length_or_none()
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] property_bag.rs: Implement parse_or_none(), length_or_none()
- Date: Tue, 21 Mar 2017 22:58:23 +0000 (UTC)
commit 691cd35ea83f35c4c7bd460b0a88fb53b364b0ff
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Mar 21 16:54:30 2017 -0600
property_bag.rs: Implement parse_or_none(), length_or_none()
And reimplement length_or_default()/parse_or_default() in terms of
those.
These parse a value from a string, or return None as an Option.
rust/src/property_bag.rs | 42 ++++++++++++++++++++++++++++++++++--------
1 files changed, 34 insertions(+), 8 deletions(-)
---
diff --git a/rust/src/property_bag.rs b/rust/src/property_bag.rs
index 60a16ad..4b42b40 100644
--- a/rust/src/property_bag.rs
+++ b/rust/src/property_bag.rs
@@ -27,24 +27,50 @@ pub fn lookup (pbag: *const RsvgPropertyBag, key: &str) -> Option<String> {
}
}
-pub fn length_or_default (pbag: *const RsvgPropertyBag, key: &'static str, length_dir: LengthDir) -> Result
<RsvgLength, NodeError> {
+pub fn length_or_none (pbag: *const RsvgPropertyBag, key: &'static str, length_dir: LengthDir) -> Result
<Option<RsvgLength>, NodeError> {
let value = lookup (pbag, key);
if let Some (v) = value {
- RsvgLength::parse (&v, length_dir).map_err (|e| NodeError::attribute_error (key, e))
+ RsvgLength::parse (&v, length_dir).map (|l| Some (l))
+ .map_err (|e| NodeError::attribute_error (key, e))
} else {
- Ok (RsvgLength::default ())
+ Ok (None)
}
}
-pub fn parse_or_default<T> (pbag: *const RsvgPropertyBag, key: &'static str) -> Result <T, NodeError>
+pub fn length_or_default (pbag: *const RsvgPropertyBag, key: &'static str, length_dir: LengthDir) -> Result
<RsvgLength, NodeError> {
+ let r = length_or_none (pbag, key, length_dir);
+
+ match r {
+ Ok (Some (v)) => Ok (v),
+ Ok (None) => Ok (RsvgLength::default ()),
+ Err (e) => Err (e)
+ }
+}
+
+pub fn parse_or_none<T> (pbag: *const RsvgPropertyBag, key: &'static str) -> Result <Option<T>, NodeError>
where T: Default + FromStr<Err = AttributeError>
{
let value = lookup (pbag, key);
- if let Some (v) = value {
- T::from_str (&v).map_err (|e| NodeError::attribute_error (key, e))
- } else {
- Ok (T::default ())
+ match value {
+ Some (v) => {
+ T::from_str (&v).map (|v| Some (v))
+ .map_err (|e| NodeError::attribute_error (key, e))
+ },
+
+ None => Ok (None)
+ }
+}
+
+pub fn parse_or_default<T> (pbag: *const RsvgPropertyBag, key: &'static str) -> Result <T, NodeError>
+ where T: Default + FromStr<Err = AttributeError>
+{
+ let r = parse_or_none::<T> (pbag, key);
+
+ match r {
+ Ok (Some (v)) => Ok (v),
+ Ok (None) => Ok (T::default ()),
+ Err (e) => Err (e)
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]