たとえば、*.rs スクリプト内で使用される構造を追加します。
#[derive(Serialize, Deserialize, Debug)]
struct Foo {
Output: OUTPUT,
input: INPUT,
logs: LOGS,
}
#[derive(Serialize, Deserialize, Debug)]
struct OUTPUT {
width: u32,
samplerate: u32,
}
#[derive(Serialize, Deserialize, Debug)]
struct INPUT {
fileinputuri: String,
}
#[derive(Serialize, Deserialize, Debug)]
struct LOGS {
statuslog: String,
}
これは、
let var: Foo = serde_json::from_str(&contents).expect("error while reading json");
JSON でフィールドwidth: u32,
をに変更すると、構造体が次のように変更されます。n_width: u32,
#[derive(Serialize, Deserialize, Debug)]
struct OUTPUT {
n_width: u32,
samplerate: u32,
}
これを *.rs ファイルに追加して毎回更新するのではなく、構造体を構成ファイルに抽出し、関数呼び出し時に更新およびロードできますか?
構造体を *.rs ファイルから分離することによる安全性やパフォーマンスへの影響はありますか?
構造体を更新せずに JSON を変更できる、より良い匿名/無名の方法はありますか?
以下のコメントによると、使用serde_json::Value
はオプションですが、これは厳密に型指定された構造の代わりに使用できる安全な方法ですか? JSON ファイルにアクセスする悪意のあるユーザーによる操作に対するメモリの安全性とセキュリティが心配です。
pub enum Value {
Null,
Bool(bool),
Number(Number),
String(String),
Array(Vec<Value>),
Object(Map<String, Value>),
}
このプログラムのフィールドへの参照はこれ以上必要n_width
ないため、Rust 開発チームがコードを開く必要はなく、JSON チームだけが JSON ファイルと構造体ファイルに変更を加えると仮定します。