hisamounaのブログ

アウトプットを習慣化するためのブログ

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)?;

普段はGoを書いているので、enumの扱いに不慣れです、、、

returnの型を定義

pub fn read_yaml(file_name: String) -> Result<Mapping> {

Rustを書いてみての感想 (Goと比較して)

  • Rsultと?を組み合わせることで、都度、if err != nil { return err} を書かなくていいのは便利

  • 別ファイルの関数を呼び出すときの手続きが必要。Goだと同一packageであれば必要なかったので新鮮でした。 1ファイル = 1moduleという考え方なんですね。