Added documentation and tests
This commit is contained in:
parent
d33190a46d
commit
cb933d4896
@ -227,8 +227,12 @@ impl Settings {
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```no_run
|
||||
/// let s = lang_evolve_core::settings::Settings::from("settings.yml");
|
||||
/// ```
|
||||
/// # use lang_evolve_core::settings::Settings;
|
||||
/// # use std::path::Path;
|
||||
/// # let s = Settings::default();
|
||||
/// # s.export(Path::new("settings.yml"));
|
||||
/// let s = Settings::from("settings.yml");
|
||||
/// ```
|
||||
pub fn from<S>(s: S) -> std::io::Result<Self>
|
||||
where
|
||||
@ -245,6 +249,20 @@ impl Settings {
|
||||
///
|
||||
/// * `from` - Regex that should match the text to be replaced
|
||||
/// * `to` - Regex that should replace some text
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # use lang_evolve_core::settings::Settings;
|
||||
/// let mut settings = Settings::default();
|
||||
/// settings.add_rule("ha", "wa");
|
||||
///
|
||||
/// use std::str::FromStr;
|
||||
/// let reference = Settings::from_str(
|
||||
/// r#"{"version":"1","categories":{},"rules":[{"from":"ha","to":"wa"}]}"#)
|
||||
/// .unwrap();
|
||||
/// assert_eq!(reference, settings);
|
||||
/// ```
|
||||
pub fn add_rule(&mut self, from: &str, to: &str) {
|
||||
self.rules.push(Rule::new(from, to))
|
||||
}
|
||||
@ -255,6 +273,20 @@ impl Settings {
|
||||
///
|
||||
/// * `name` - Name of the category
|
||||
/// * `content` - Content of the category, phonemes
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # use lang_evolve_core::settings::Settings;
|
||||
/// let mut settings = Settings::default();
|
||||
/// settings.add_category("C", "abcde");
|
||||
///
|
||||
/// use std::str::FromStr;
|
||||
/// let reference = Settings::from_str(
|
||||
/// r#"{"version":"1","categories":{"C": "abcde"},"rules":[]}"#)
|
||||
/// .unwrap();
|
||||
/// assert_eq!(reference, settings);
|
||||
/// ```
|
||||
pub fn add_category(&mut self, name: &str, content: &str) {
|
||||
self.categories.insert(String::from(name), String::from(content));
|
||||
}
|
||||
@ -309,6 +341,7 @@ impl Settings {
|
||||
RULESET_CURRENT_VERSION.to_string()
|
||||
}
|
||||
|
||||
/// Transform input rules into Regexes that can be understood by Rust.
|
||||
fn update_rules(&self) -> std::result::Result<Vec<Rule>, String> {
|
||||
let rules = self.rules.clone();
|
||||
let rules: Vec<Rule> = rules
|
||||
|
@ -44,6 +44,22 @@ impl Rule {
|
||||
}
|
||||
}
|
||||
|
||||
/// Detect the number of categories in a rule
|
||||
///
|
||||
/// For a rule, this function detects the number of categories set in the
|
||||
/// `from` member of a `Rule` and in its `to` member. The result is returned
|
||||
/// as a tuple of `u8`s.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # #[path = "mod.rs"]
|
||||
/// # mod rule;
|
||||
/// # use rule::Rule;
|
||||
/// let rule = Rule::new("%Bea*i+", "a%A%C");
|
||||
/// let nb_rules = rule.detect_number_categories();
|
||||
/// assert_eq!((1 as u8, 2 as u8), nb_rules);
|
||||
/// ```
|
||||
pub fn detect_number_categories(&self) -> (u8, u8) {
|
||||
let captures_from = self.from.to_string().matches('%').count() as u8;
|
||||
let captures_to = self.to.matches('%').count() as u8;
|
||||
@ -94,6 +110,22 @@ impl Rule {
|
||||
}
|
||||
|
||||
impl From<String> for Rule {
|
||||
/// Allow to create a rule from a single `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(String::from("%C>%D"));
|
||||
/// assert_eq!(rule1, rule2);
|
||||
/// ```
|
||||
fn from(source: String) -> Self {
|
||||
let components: Vec<&str> = source.split_terminator('>').collect();
|
||||
Rule::new(components[0], components[1])
|
||||
@ -101,6 +133,21 @@ impl From<String> for Rule {
|
||||
}
|
||||
|
||||
impl PartialEq for Rule {
|
||||
/// Equality between `Rule` structs
|
||||
///
|
||||
/// This allows for equality comparison between two `Rule` structs.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// # #[path = "mod.rs"]
|
||||
/// # mod rule;
|
||||
/// use rule::Rule;
|
||||
/// let rule1 = Rule::new("%C", "%D");
|
||||
/// let rule2 = Rule::from("%C>%D");
|
||||
/// assert!(rule1 == rule2);
|
||||
/// assert!(rule2 == rule1);
|
||||
/// ```
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.from == other.from && self.to == other.to
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user