# version追加方法
## ライブラリ作成方法
"v0.1.x"を追加する場合について考える。
1. srcディレクトリに"v0_1_x.rs"のようにファイルを作成する。
2. src/lib.rsに"pub mod v0_1_x;"のように追記する。
3. "v0_1_x.rs"に関数群を作成する。(他のバージョンからコピーしてから始めた方が楽)
## テスト作成方法
1. "convert_jstest_to_rust.py"の変数"SRC_TEST_FILE"と"OUT_TEST_FILE"を編集する。
2. 必要であれば、その他の変数も編集する。
3. "$ ./convert_jstest_to_rust.py"にて実行する。
4. エラーが出るので、既存の他のバージョンのテストを参照しながら、エラーを修正するように編集していく。
変数"cosignatures_layout"辺りで、clone()を付けないといけない事が分かりにくい。
# プログラム作成時に詰まった点
* 状況に応じて辞書型、配列型のどちらかになる変数が存在したため、
JsonValueを用いて、両方に対応した。
* JsonValueを辞書型として扱う場合は dict["key"] のようにアクセスする。
* JsonValueを配列型として扱う場合は、match文で JsonValue::Array である事を確認してからでないといけない。
* JsonValueでない型をJsonValueに変換するには .into() を多用した。
* JsonValueを文字列と比較する時などは暗黙的に型変換を行ってくれるが、
keyとして使用するときなどは明示的に型変換を行う必要がある。
* JsonValueのhas_key()メソッドとcontains()メソッド、さらにString型のcontains()メソッドをそれぞれ使用する必要があり、混乱した。これによるエラーは実行時に期待値と比較するまで気づくことができないため、問題個所を見つけづらい。
* &str型とString型の違いによるエラーが多発した。&strからStringへは .to_string() で変換可能。逆は、&を付けるだけで変換可能。
* 他には、純粋にRustの所有権が難しかった。
* テスト項目が多くなることによる見づらさ解消方法は、"$ cargo test <テスト名>" と実行することにより、実行するテスト項目を減らすことができる。