[librsvg: 12/23] Move LanguageTags to the accept_language module




commit 722968aa722b16118d69fcc6a4b39ee37aa2d044
Author: Federico Mena Quintero <federico gnome org>
Date:   Thu May 20 13:23:20 2021 -0500

    Move LanguageTags to the accept_language module

 src/accept_language.rs | 69 +++++++++++++++++++++++++++++++++++++++++++++++---
 src/cond.rs            | 58 ++----------------------------------------
 src/drawing_ctx.rs     |  2 +-
 src/element.rs         |  3 ++-
 4 files changed, 71 insertions(+), 61 deletions(-)
---
diff --git a/src/accept_language.rs b/src/accept_language.rs
index 9d4626bd..4be8ace2 100644
--- a/src/accept_language.rs
+++ b/src/accept_language.rs
@@ -1,6 +1,7 @@
 //! Parser for an Accept-Language HTTP header.
 
 use language_tags::{LanguageTag, ParseError};
+use locale_config::{LanguageRange, Locale};
 
 use std::str::FromStr;
 
@@ -76,7 +77,8 @@ impl Item {
             (s, None)
         };
 
-        let tag = LanguageTag::parse(before_semicolon).map_err(AcceptLanguageError::InvalidLanguageTag)?;
+        let tag = LanguageTag::parse(before_semicolon)
+            .map_err(AcceptLanguageError::InvalidLanguageTag)?;
 
         let weight;
 
@@ -122,6 +124,61 @@ impl Item {
     }
 }
 
+/// A list of BCP47 language tags.
+///
+/// https://www.rfc-editor.org/info/rfc5664
+#[derive(Debug, Clone, PartialEq)]
+pub struct LanguageTags(Vec<LanguageTag>);
+
+impl LanguageTags {
+    pub fn empty() -> Self {
+        LanguageTags(Vec::new())
+    }
+
+    /// Converts a `Locale` to a set of language tags.
+    pub fn from_locale(locale: &Locale) -> Result<LanguageTags, String> {
+        let mut tags = Vec::new();
+
+        for locale_range in locale.tags_for("messages") {
+            if locale_range == LanguageRange::invariant() {
+                continue;
+            }
+
+            let str_locale_range = locale_range.as_ref();
+
+            let locale_tag = LanguageTag::from_str(str_locale_range).map_err(|e| {
+                format!(
+                    "invalid language tag \"{}\" in locale: {}",
+                    str_locale_range, e
+                )
+            })?;
+
+            if !locale_tag.is_language_range() {
+                return Err(format!(
+                    "language tag \"{}\" is not a language range",
+                    locale_tag
+                ));
+            }
+
+            tags.push(locale_tag);
+        }
+
+        Ok(LanguageTags(tags))
+    }
+
+    pub fn from(tags: Vec<LanguageTag>) -> LanguageTags {
+        LanguageTags(tags)
+    }
+
+    pub fn iter(&self) -> impl Iterator<Item = &LanguageTag> {
+        self.0.iter()
+    }
+
+    pub fn any_matches(&self, language_tag: &LanguageTag) -> bool {
+        self.0.iter().any(|tag| tag.matches(language_tag))
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;
@@ -263,9 +320,15 @@ mod tests {
 
     #[test]
     fn empty_lists() {
-        assert!(matches!(AcceptLanguage::parse(""), Err(AcceptLanguageError::NoElements)));
+        assert!(matches!(
+            AcceptLanguage::parse(""),
+            Err(AcceptLanguageError::NoElements)
+        ));
 
-        assert!(matches!(AcceptLanguage::parse(","), Err(AcceptLanguageError::NoElements)));
+        assert!(matches!(
+            AcceptLanguage::parse(","),
+            Err(AcceptLanguageError::NoElements)
+        ));
 
         assert!(matches!(
             AcceptLanguage::parse(", , ,,,"),
diff --git a/src/cond.rs b/src/cond.rs
index e24d28d0..1751657f 100644
--- a/src/cond.rs
+++ b/src/cond.rs
@@ -6,8 +6,8 @@ use std::ascii::AsciiExt;
 use std::str::FromStr;
 
 use language_tags::LanguageTag;
-use locale_config::{LanguageRange, Locale};
 
+use crate::accept_language::LanguageTags;
 use crate::error::*;
 
 // No extensions at the moment.
@@ -77,61 +77,6 @@ impl RequiredFeatures {
     }
 }
 
-/// A list of BCP47 language tags.
-///
-/// https://www.rfc-editor.org/info/rfc5664
-#[derive(Debug, Clone, PartialEq)]
-pub struct LanguageTags(Vec<LanguageTag>);
-
-impl LanguageTags {
-    pub fn empty() -> Self {
-        LanguageTags(Vec::new())
-    }
-
-    /// Converts a `Locale` to a set of language tags.
-    pub fn from_locale(locale: &Locale) -> Result<LanguageTags, String> {
-        let mut tags = Vec::new();
-
-        for locale_range in locale.tags_for("messages") {
-            if locale_range == LanguageRange::invariant() {
-                continue;
-            }
-
-            let str_locale_range = locale_range.as_ref();
-
-            let locale_tag = LanguageTag::from_str(str_locale_range).map_err(|e| {
-                format!(
-                    "invalid language tag \"{}\" in locale: {}",
-                    str_locale_range, e
-                )
-            })?;
-
-            if !locale_tag.is_language_range() {
-                return Err(format!(
-                    "language tag \"{}\" is not a language range",
-                    locale_tag
-                ));
-            }
-
-            tags.push(locale_tag);
-        }
-
-        Ok(LanguageTags(tags))
-    }
-
-    pub fn from(tags: Vec<LanguageTag>) -> LanguageTags {
-        LanguageTags(tags)
-    }
-
-    pub fn iter(&self) -> impl Iterator<Item = &LanguageTag> {
-        self.0.iter()
-    }
-
-    fn any_matches(&self, language_tag: &LanguageTag) -> bool {
-        self.0.iter().any(|tag| tag.matches(language_tag))
-    }
-}
-
 #[derive(Debug, PartialEq)]
 pub struct SystemLanguage(LanguageTags);
 
@@ -174,6 +119,7 @@ impl SystemLanguage {
 #[cfg(test)]
 mod tests {
     use super::*;
+    use locale_config::Locale;
 
     #[test]
     fn required_extensions() {
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index c041a7d5..42df5fa2 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -10,9 +10,9 @@ use std::cell::RefCell;
 use std::convert::TryFrom;
 use std::rc::{Rc, Weak};
 
+use crate::accept_language::LanguageTags;
 use crate::aspect_ratio::AspectRatio;
 use crate::bbox::BoundingBox;
-use crate::cond::LanguageTags;
 use crate::coord_units::CoordUnits;
 use crate::dasharray::Dasharray;
 use crate::document::{AcquiredNodes, NodeId};
diff --git a/src/element.rs b/src/element.rs
index 801b0c9e..5618241b 100644
--- a/src/element.rs
+++ b/src/element.rs
@@ -6,8 +6,9 @@ use std::collections::{HashMap, HashSet};
 use std::fmt;
 use std::ops::Deref;
 
+use crate::accept_language::LanguageTags;
 use crate::bbox::BoundingBox;
-use crate::cond::{LanguageTags, RequiredExtensions, RequiredFeatures, SystemLanguage};
+use crate::cond::{RequiredExtensions, RequiredFeatures, SystemLanguage};
 use crate::css::{Declaration, Origin};
 use crate::document::AcquiredNodes;
 use crate::drawing_ctx::DrawingCtx;


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