From 66363879c8943713cf8d34b93091d9388317102b Mon Sep 17 00:00:00 2001 From: ElBe <90863907+ElBe-Plaq@users.noreply.github.com> Date: Thu, 14 Sep 2023 17:08:58 +0200 Subject: [PATCH] Converted tabs to spaces and fixed tests --- .github/README.md | 8 +-- examples/main.rs | 10 ++-- src/lib.rs | 145 +++++++++++++++++++++++----------------------- 3 files changed, 82 insertions(+), 81 deletions(-) diff --git a/.github/README.md b/.github/README.md index 75df90e..1e8dc44 100644 --- a/.github/README.md +++ b/.github/README.md @@ -1,5 +1,5 @@

- localizer-rs + localizer-rs

Localizer helps localize (translate) your rust applications using json files. @@ -67,7 +67,7 @@ With the following `en.json` file. ```json { - "error": "{{color.red}}{{bold}}Error:{{end}} Something went wrong: {{details}}." + "error": "{{color.red}}{{bold}}Error:{{end}} Something went wrong: {{details}}." } ``` @@ -79,9 +79,9 @@ And the following rust code. use localizer_rs; fn main() { - let config: localizer_rs::Config = localizer_rs::Config::new("translations", "en"); + let config: localizer_rs::Config = localizer_rs::Config::new("translations", "en"); - println!("{:}", config.t("error", vec![("details", "Path not found")])); + println!("{:}", config.t("error", vec![("details", "Path not found")])); } ``` diff --git a/examples/main.rs b/examples/main.rs index 1086aa7..1fa9403 100644 --- a/examples/main.rs +++ b/examples/main.rs @@ -1,10 +1,10 @@ use localizer_rs; fn main() { - let config: localizer_rs::Config = localizer_rs::Config::new("translations", "en"); + let config: localizer_rs::Config = localizer_rs::Config::new("translations", "en"); - println!("{:}", config.t("error", vec![("details", "Something went wrong when trying to do stuff")])); - println!("{:}", config.t("success", vec![("balance", "$10"), ("user", "John Doe")])); + println!("{:}", config.t("error", vec![("details", "Something went wrong when trying to do stuff")])); + println!("{:}", config.t("success", vec![("balance", "$10"), ("user", "John Doe")])); - println!("{:}", config.t("all", vec![])); -} \ No newline at end of file + println!("{:}", config.t("all", vec![])); +} diff --git a/src/lib.rs b/src/lib.rs index 4d84996..21d6b4a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +#![doc = ".github/README.md"] // localizer-rs // Version: 1.0.0 @@ -61,8 +62,8 @@ use serde_json; /// ``` #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Config { - pub path: String, - pub language: String + pub path: String, + pub language: String } @@ -96,16 +97,16 @@ impl Config { /// # See also /// /// - [`Config`] - pub fn new(path: &str, language: &str) -> Config { - let mut config: Config = Config { - path: "".to_string(), - language: "".to_string() - }.to_owned(); - config = config.set_language(language).to_owned(); - config = config.set_path(path).to_owned(); + pub fn new(path: &str, language: &str) -> Config { + let mut config: Config = Config { + path: "".to_string(), + language: "".to_string() + }.to_owned(); + config = config.set_language(language).to_owned(); + config = config.set_path(path).to_owned(); - return config; - } + return config; + } /// Sets the path for the config object. /// @@ -126,32 +127,32 @@ impl Config { /// /// ```rust /// # use localizer_rs; - /// # let config: localizer_rs::Config = localizer_rs::Config::new("examples/translations", "language"); + /// # let mut config: localizer_rs::Config = localizer_rs::Config::new("examples/translations", "language"); /// config.set_path("examples"); /// ``` /// /// # See also /// /// - [`Config`] - pub fn set_path(&mut self, str_path: &str) -> &Config { - let path: &Path = Path::new(str_path); + pub fn set_path(&mut self, str_path: &str) -> &Config { + let path: &Path = Path::new(str_path); - match path.try_exists() { - Ok(value) => { - if !value { - eprintln!("Translation path {:?} does not exist", str_path); - exit(1); - } - }, - Err(error) => { - eprintln!("Can't open translation path {:?}: {}", str_path, error); - exit(2); - } - } + match path.try_exists() { + Ok(value) => { + if !value { + eprintln!("Translation path {:?} does not exist", str_path); + exit(1); + } + }, + Err(error) => { + eprintln!("Can't open translation path {:?}: {}", str_path, error); + exit(2); + } + } - self.path = String::from(path.to_owned().to_str().expect("Expected valid path")); - return self; - } + self.path = String::from(path.to_owned().to_str().expect("Expected valid path")); + return self; + } /// Sets the language for the config object. /// @@ -168,17 +169,17 @@ impl Config { /// /// ```rust /// # use localizer_rs; - /// # let config: localizer_rs::Config = localizer_rs::Config::new("examples/translations", "language"); + /// # let mut config: localizer_rs::Config = localizer_rs::Config::new("examples/translations", "language"); /// config.set_language("en"); /// ``` /// /// # See also /// /// - [`Config`] - pub fn set_language(&mut self, language: &str) -> &Config { - self.language = language.to_string(); - return self; - } + pub fn set_language(&mut self, language: &str) -> &Config { + self.language = language.to_string(); + return self; + } /// Translates the specified key in the language specified in the config. /// @@ -203,51 +204,51 @@ impl Config { /// # See also /// /// - [`Config`] - pub fn t(&self, key: &str, arguments: Vec<(&str, &str)>) -> String { - return self.translate::(key, arguments); - } + pub fn t(&self, key: &str, arguments: Vec<(&str, &str)>) -> String { + return self.translate::(key, arguments); + } - fn translate(&self, key: &str, mut arguments: Vec<(&str, &str)>) -> String - where - T: serde::Serialize + for<'de> serde::Deserialize<'de> - { - let mut colors: Vec<(&str, &str)> = vec![ - // Formatting codes - ("end", "\x1b[0m"), ("bold", "\x1b[1m"), ("italic", "\x1b[3m"), ("underline", "\x1b[4m"), ("overline", "\x1b[53m"), + fn translate(&self, key: &str, mut arguments: Vec<(&str, &str)>) -> String + where + T: serde::Serialize + for<'de> serde::Deserialize<'de> + { + let mut colors: Vec<(&str, &str)> = vec![ + // Formatting codes + ("end", "\x1b[0m"), ("bold", "\x1b[1m"), ("italic", "\x1b[3m"), ("underline", "\x1b[4m"), ("overline", "\x1b[53m"), - // Foreground colors - ("color.black", "\x1b[30m"), ("color.red", "\x1b[31m"), ("color.green", "\x1b[32m"), ("color.yellow", "\x1b[33m"), - ("color.blue", "\x1b[34m"), ("color.magenta", "\x1b[35m"), ("color.cyan", "\x1b[36m"), ("color.white", "\x1b[37m"), + // Foreground colors + ("color.black", "\x1b[30m"), ("color.red", "\x1b[31m"), ("color.green", "\x1b[32m"), ("color.yellow", "\x1b[33m"), + ("color.blue", "\x1b[34m"), ("color.magenta", "\x1b[35m"), ("color.cyan", "\x1b[36m"), ("color.white", "\x1b[37m"), - // Bright foreground colors - ("color.bright_black", "\x1b[90m"), ("color.bright_red", "\x1b[91m"), ("color.bright_green", "\x1b[92m"), - ("color.bright_yellow", "\x1b[93m"), ("color.bright_blue", "\x1b[94m"), ("color.bright_magenta", "\x1b[95m"), - ("color.bright_cyan", "\x1b[96m"), ("color.bright_white", "\x1b[97m"), + // Bright foreground colors + ("color.bright_black", "\x1b[90m"), ("color.bright_red", "\x1b[91m"), ("color.bright_green", "\x1b[92m"), + ("color.bright_yellow", "\x1b[93m"), ("color.bright_blue", "\x1b[94m"), ("color.bright_magenta", "\x1b[95m"), + ("color.bright_cyan", "\x1b[96m"), ("color.bright_white", "\x1b[97m"), - // Background colors - ("back.black", "\x1b[40m"), ("back.red", "\x1b[41m"), ("back.green", "\x1b[42m"), ("back.yellow", "\x1b[43m"), - ("back.blue", "\x1b[44m"), ("back.magenta", "\x1b[45m"), ("back.cyan", "\x1b[46m"), ("back.white", "\x1b[47m"), + // Background colors + ("back.black", "\x1b[40m"), ("back.red", "\x1b[41m"), ("back.green", "\x1b[42m"), ("back.yellow", "\x1b[43m"), + ("back.blue", "\x1b[44m"), ("back.magenta", "\x1b[45m"), ("back.cyan", "\x1b[46m"), ("back.white", "\x1b[47m"), - // Bright background colors - ("back.bright_black", "\x1b[100m"), ("back.bright_red", "\x1b[101m"), ("back.bright_green", "\x1b[102m"), - ("back.bright_yellow", "\x1b[103m"), ("back.bright_blue", "\x1b[104m"), ("back.bright_magenta", "\x1b[105m"), - ("back.bright_cyan", "\x1b[106m"), ("back.bright_white", "\x1b[107m"), - ]; - arguments.append(&mut colors); + // Bright background colors + ("back.bright_black", "\x1b[100m"), ("back.bright_red", "\x1b[101m"), ("back.bright_green", "\x1b[102m"), + ("back.bright_yellow", "\x1b[103m"), ("back.bright_blue", "\x1b[104m"), ("back.bright_magenta", "\x1b[105m"), + ("back.bright_cyan", "\x1b[106m"), ("back.bright_white", "\x1b[107m"), + ]; + arguments.append(&mut colors); - let file: File = File::open(Path::new(format!("./{}/{}.json", &self.path, &self.language).as_str())).unwrap(); - let reader: BufReader = BufReader::new(file); + let file: File = File::open(Path::new(format!("./{}/{}.json", &self.path, &self.language).as_str())).unwrap(); + let reader: BufReader = BufReader::new(file); - let json: serde_json::Value = serde_json::to_value::(serde_json::from_reader::, T>(reader).unwrap()).unwrap().to_owned(); - let mut result: String = match json[key].as_str() { - Some(value) => value.to_string(), - None => "".to_string() - }; + let json: serde_json::Value = serde_json::to_value::(serde_json::from_reader::, T>(reader).unwrap()).unwrap().to_owned(); + let mut result: String = match json[key].as_str() { + Some(value) => value.to_string(), + None => "".to_string() + }; - for (key, value) in arguments { - result = result.replace(("{{".to_owned() + key + "}}").as_str(), value); - } + for (key, value) in arguments { + result = result.replace(("{{".to_owned() + key + "}}").as_str(), value); + } - return result; - } + return result; + } }