# 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 <テスト名>" と実行することにより、実行するテスト項目を減らすことができる。