以前 Rust で作成した CircleCI API クライアントをリファクタリングした

1年ほど間に Rust で作成した CircleCI API のクライアントツールを久々に見てみたら、色々と直したい箇所があったので、リファクタリングした。 とりあえず、リファクタしてみた箇所は、2箇所。

  • API で取得した JSON データを struct でマッピング。
  • ビルドのステータスを表すクラスを enum にする。

API で取得した JSON データを struct でマッピング

今までは、API で取得した JSON データをそのまま、配列やハッシュとして処理していたが、RustcDecodablestruct にマッピングしてみた。 以前のは、値を取り出す際に、unwrap が多すぎかつ、わかりづらい。。。 リファクタリング開始時は、mapand_then などを使用して、unwrap 部分をなくしていこうかとも思ったのだが、struct にマッピングした方が保守性がいいかなと思い、マッピングするようにした。 作成当初もおそらくマッピングしようとしたのだが、上手くいかず断念したんだと思う。 確かに今回マッピングする際に、CircleCI の API で、ハッシュのキーの部分が動的に変わる箇所があり、若干悩んだが、そこは HashMap としてマッピングすることにした。(API のハッシュのキーの部分が動的なので、struct の プロパティとして定義できない。)

ビルドのステータスを表すクラスを enum にする

これも、作成した当初に enumstruct で悩んだと思う。多分、ポリモーフィズムの形に持って行きたくて struct にしたような気がする。(状態が増えた時に、match の分岐に追加したくない。) でも、今見ると、やっぱり enum で定義した方が良い気がするので、変更。(上手く説明できないのだが。。。) match 式を使っていれば、状態が増えたとしても、網羅されていなければコンパイルエラーになるので、良しとする。

所感

JSON データを取り出している部分はだいぶすっきりして、読みやすくなったと思う。 ステータスを enum にすることにより、コード量も少なくなり、気分的にもスッキリした。

TODO

  • API をモック化しテスト出来るようにする。
  • Result などを使用して、エラー処理をちゃんとする。
comments powered by Disqus