ヴァルサンとか読みます *1。
crates.ioで公開してます → https://crates.io/crates/varsun
どういうライブラリか
やりたかったことは単純に、文字列に埋め込まれた環境変数を展開したかったのです。
具体的にはGo言語の os.ExpandEnv 相当のができればよかった。
使い方
extern crate varsun; let homedir = varsun::substitute("${HOME}", |name: &str| -> Option<String> { match ::std::env::var(name) { Ok(val) => Some(val), Err(_) => None, } });
環境変数に限ればヘルパー関数があって、こうなります。
extern crate varsun; let homedir = varsun::substenvar("${HOME}"); // これは以下と同じだったりします。 // let homedir = varsun::substitute("${HOME}", varsun::envar);
特徴
地味な特徴として、Windows形式での展開が可能です *2。
むしろこっちが本命かもしれない。
extern crate varsun; let homedir = varsun::mswin::substenvar("%USERPROFILE%"); // 実は、varsun::{substitute, substenvar} は cfg!(windows) の結果がtrueの場合とそうじゃない場合で処理が違います。 // 具体的には // if cfg!(windows) { // return varsun::mswin::substitute(src, fn); // } else { // return varsun::posix::substitute(src, fn); // } // のようになってます。
TODOとか
検索が適当実装すぎるので、ちゃんとパフォーマンスが出るであろう実装にしたい*3。
メモ
標準ライブラリで環境変数展開ができれば要らなくなるはずなんですけどねー