From d2118316d3e2b98c494d4beeb98af486c1e99d9f Mon Sep 17 00:00:00 2001 From: southerntofu Date: Thu, 30 Apr 2020 18:53:49 +0200 Subject: [PATCH] Start rust implementation --- Cargo.lock | 51 ++++++++++++++++++++ Cargo.toml | 14 ++++++ src/.db.rs.swp | Bin 0 -> 12288 bytes src/.main.rs.swp | Bin 0 -> 12288 bytes src/log.rs | 122 +++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 16 +++++++ 6 files changed, 203 insertions(+) create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/.db.rs.swp create mode 100644 src/.main.rs.swp create mode 100644 src/log.rs create mode 100644 src/main.rs diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..072cf97 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,51 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "git-build-rs" +version = "0.1.0" +dependencies = [ + "glob", + "lazy_static", + "serde_json", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "itoa" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "ryu" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" + +[[package]] +name = "serde" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" + +[[package]] +name = "serde_json" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd" +dependencies = [ + "itoa", + "ryu", + "serde", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..070fa98 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "git-build-rs" +version = "0.1.0" +authors = ["southerntofu"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +glob = "0.3" +lazy_static = "1.4" +# Translations +#serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" diff --git a/src/.db.rs.swp b/src/.db.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..1b9a1e207ba86532c92b076135003129b1e94f53 GIT binary patch literal 12288 zcmeI2&u`pB6vro#XdzIFS|P!S$+ivNu-Q%EQaPkjOA-;JYNJrvq5>nBQ+{P?lA9>$Y? zM=PKe&mKr5gX&Sl|kH8(an_!M}&$6Z{Ik1RYQZCO8F-f-&$9w7d^~0AGPy;B)XP_ymyFUjTh+ z1+)TMf&Z@pwfyDy+?5Sw$xWkFDl^t)92YExH}smxq+g;Z$MU3LRLU+9My{_sf6^$e z)cH~r1(C_OyQK;j<$0D_q23T>zHo+b@78rIyG1f9c0@IMJL__R{&POaj4l<$#jsq5 z8||Pa_!OTF=4NNn_d>5U@OG`nU)vD&Ca3S?xabI*hazgbQo4a(W{LOo#}kStJ{P!D zma0cgTapb3xrL)^tG;NK9>`zIT6$aNg z&W2o=*`>9$`r43*CF5a}OZ5X2oK!LT9lZATomq@-A&Un@$TAOu_ff&-?S=$iXlD7R zVdd_0ZC@LD&klU$`U6XMm_w=?IojM39QAH(8XKap4u!9xt#TDfL11svie#f+&gvgL z8JX1qqRC7T<}kDNt+p^Z{Z>`b2xLPlq@H!7xJfhXQTL`LMWf{+NlD>3)$Flqdx4ML zT+B(MoKXD**+45D|_YJBr%2m+`g{_Rzr3=fY z0|<>trwQ&SnJIEclb!EyuuMw@X0$fwo-B?*oBT5cOoj+JSyffaarwlUH>NTYWpDWv z4}`o~FLOpiB6X1TBJLvBp-VYn0MAKvE(ep>ejbj5)uQP)rV7)amn2E^u|i6f7|}&x zo2D`dRtjWwtOzyq1xhCh0Q3IFm7@re>#d~FN!ipx<@~+ z(vqSRGO_D#j(&;W&sMC-N#?|qsu#0p`g2=+FSLBu#wooVcrBcC+gmeN=RW_WYGb1$lo5^NPhMEhNq{@e$ zo?QJgrhPDSiv1qjYKVC+Gf34!D2{8Ib=m7J5oeFDO5Rzzi%(pEChk>XEQ)5lUVfM1 z+{GUR+>R_IOw$Y2=aWzJ5d%62aG=M&+d+3IollSUrH-1X&-QyZ4vyO02NKLQx6{E? J66Lz{>^}tRg_{5X literal 0 HcmV?d00001 diff --git a/src/.main.rs.swp b/src/.main.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..fe99a2dd841efbaebd22a0517dc4ba6e5ef29484 GIT binary patch literal 12288 zcmeI2&u$Yj5XPt6OA&nmcR^?qHM=MVZ~H|Y|OYec8N-@p9S{z7$4 zG;zv??M0)?8gH6KQABS;!St~;<8)m5&TvvzdB?ic*-=_&rB19{Tm%sy00NgMF!4oa zca^qpceg_Fjc7xxUw?M_I>-P45C8!X009sH0T2KI5Lj9QzFDDn?EcEUgZ25m^4~mP zVgdmW009sH0T2KI5C8!X009sH0T5V10$EPddS*g&FU^87gz=X5C8!X009sH0T2KI5C8!XpeYF+ zjV-mW^hO*V%l&DzDO{^JJE)WwPV9+%nE1@Sa`8X=`EYh1<=xC@!^|lu3v22@VX9o& zxG=WPd?-0hlk+FyT>H?}YLJ(<#kKxkV#ZRIx-fCnSTj=2anuuzif?)4Jjb=uSzuTt zrRIm{K8|jd-CaEhuA;=7f%DwMIBso = load_translations(); +} + +fn load_translations() -> HashMap { + let folder = env::var("I18N").unwrap_or("./i18n/".to_string()); + let mut path = PathBuf::from(folder); + if !path.is_dir() { + panic!("Could not find translations in {:?}", path); + } + path.push(format!("{}.json", *LANG)); + + if !path.is_file() { + panic!("Could not find translation file: {:?}", path); + } + + match fs::read_to_string(&path) { + Ok(content) => { + //let trans: HashMap = serde_json::from_str(&content).expect("Could not load translations"); + //return trans + match serde_json::from_str(&content) { + Ok(trans) => trans, + Err(e) => panic!("JSON ERROR: {}", e) + } + }, + Err(e) => { + panic!("IO ERROR: {}", e); + } + } +} + +fn trans(key: &str) -> String { + match TRANSLATIONS.get(key) { + Some(t) => t.to_string(), + None => { + panic!("Unknown translation string in lang {}: {}", *LANG, key); + } + } +} + +fn lang_from_env() -> String { + let lang = env::var("LANG").expect("$LANG not set in environment. Your machine is misconfigured!"); + lang[0..2].to_string() +} + + +struct LogLevel { + info: bool, + debug: bool, + error: bool +} + +impl LogLevel { + fn from_env() -> LogLevel { + // Default values + let error = true; + let mut info = true; + let mut debug = false; + + let env_log = env::var("LOG").unwrap_or("info".to_string()); + match env_log.to_lowercase().as_str() { + "info" => {}, + "debug" => { debug = true; }, + "error" => { info = false; } + _ => { + // This happens before loglevel initialization + // so we can't use warn function + eprintln!("$LOG level is incorrect: {} (can be: debug, info, error", env_log); + } + } + + return LogLevel { + info, + debug, + error + } + } +} + +fn expand(msg: &str, vars: Option<&HashMap>) -> String { + let mut trans_string = trans(msg); + if vars.is_some() { + for (key, val) in vars.unwrap() { + trans_string = trans_string.replace(key, val); + } + } + trans_string +} + +pub fn info(msg: &str, vars: Option<&HashMap>) { + if LOGLEVEL.info { + let trans_string = expand(msg, vars); + println!("[git-build] {}", trans_string); + } +} + +pub fn error(msg: &str) { + if LOGLEVEL.error { + eprintln!("ERROR: {}", msg); + } +} + +pub fn warn(msg: &str) { + if LOGLEVEL.error { + eprintln!("WARNING: {}", msg); + } +} + +pub fn debug(msg: &str) { + if LOGLEVEL.debug { + println!("DEBUG: {}", msg); + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..56e8eba --- /dev/null +++ b/src/main.rs @@ -0,0 +1,16 @@ +use std::env; +use std::collections::HashMap; + +mod log; + +fn main() { + + let home_dir = env::var("HOME").expect("$HOME not defined. WTF?"); + let base_dir = format!("{}/.git-build", home_dir); + + let mut test = HashMap::new(); + test.insert("$i18n_task".to_string(), "test"); + log::info("process", Some(&test)); + + //let log_level = env::var("LOG").unwrap_or +}