Add From<&str> trait implementation to Rule, ToString to Regex

Also remove obvious test for Rule
This commit is contained in:
Lucien Cartier-Tilet 2020-07-12 12:30:15 +02:00
parent cb933d4896
commit 531c9b1acc
Signed by: phundrak
GPG Key ID: BD7789E705CB8DCA
2 changed files with 30 additions and 10 deletions

View File

@ -109,6 +109,29 @@ impl Rule {
} }
} }
impl From<&str> for Rule {
/// Allow to create a rule from a single literal string
///
/// It is possible to create a rule from a string, delimited by a `>`. This
/// means a rule like `%C>%D` will be interpreted as going from `%C` to
/// `%D`.
///
/// # Example
///
/// ```
/// # #[path = "mod.rs"]
/// # mod rule;
/// # use rule::Rule;
/// let rule1 = Rule::new("%C", "%D");
/// let rule2 = Rule::from("%C>%D");
/// assert_eq!(rule1, rule2);
/// ```
fn from(source: &str) -> Self {
let components: Vec<&str> = source.split_terminator('>').collect();
Rule::new(components[0], components[1])
}
}
impl From<String> for Rule { impl From<String> for Rule {
/// Allow to create a rule from a single `String` /// Allow to create a rule from a single `String`
/// ///
@ -154,13 +177,3 @@ impl PartialEq for Rule {
} }
impl Eq for Rule {} impl Eq for Rule {}
#[test]
fn rule_new() {
let rule1 = Rule::new("([ae]+)i", "${1}i");
let rule2 = Rule {
from: Regex::new("([ae]+)i"),
to: String::from("${1}i"),
};
assert_eq!(rule1, rule2);
}

View File

@ -14,11 +14,18 @@ impl Regex {
} }
/// Returns a string literal representation of the Regex /// Returns a string literal representation of the Regex
#[allow(unused)]
pub fn as_str(&self) -> &str { pub fn as_str(&self) -> &str {
self.0.as_str() self.0.as_str()
} }
} }
impl ToString for Regex {
fn to_string(&self) -> String {
self.0.to_string()
}
}
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
impl Hash for Regex { impl Hash for Regex {
fn hash<H: Hasher>(&self, state: &mut H) { fn hash<H: Hasher>(&self, state: &mut H) {