yamlファイルを読み込む (Rust)
はじめに
Rustの勉強を始めました。
実践Rustプログラミング入門をひと通り読みました。わかりやすく解説されており、体系的に学べておすすめです。
アウトプットとして、手始めにyamlファイルの読み込んで出力される簡単なコードを書きました。
実装
yamlのパースには、serde-yamlを使いました。
pub fn read_yaml(file_name: String) -> Result<Mapping> { let f = File::open(file_name)?; let reader = BufReader::new(f); let d :Mapping = serde_yaml::from_reader(reader)?; Ok(d) }
苦労したこと
- yamlのパース時にinvalid typeのエラーが発生
一番最初に書いたコード
let d = serde_yaml::from_reader(reader)?;
発生したエラー: Error: invalid type: map, expected unit
解決策: 型を明示的に定義する
let d :Mapping = serde_yaml::from_reader(reader)?;
- enumの扱い
普段はGoを書いているので、enumの扱いに不慣れです、、、
returnの型を定義
pub fn read_yaml(file_name: String) -> Result<Mapping> {
Rustを書いてみての感想 (Goと比較して)
Rsultと?を組み合わせることで、都度、
if err != nil { return err}
を書かなくていいのは便利別ファイルの関数を呼び出すときの手続きが必要。Goだと同一packageであれば必要なかったので新鮮でした。 1ファイル = 1moduleという考え方なんですね。