我有这样的结构:
pub struct NonSteamGame {
app_id:String ,
app_name:String,
start_dir:String,
icon:String,
shortcut_path:String,
launch_options:String,
is_hidden:bool,
allow_desktop_config:bool,
allow_overlay:bool,
open_vr:bool,
devkit:bool,
devkit_game_id:String,
devkit_override_app_id:String,
last_play_time:String,
flatpack_app_id:String
}
所有这些字段值都是从流中读取的,并在读取时设置。
有没有什么方法可以创建一个示例,而不需要手动初始化所有的结构体成员,当我从流中得到它们的值时给它们赋值?一个例子(伪代码):
let nsg = NonSteamGame {} //Do not initialize all values manually here
... get property_name and value from stream...
match property_name {
"appid" => nsg.app_id = String::new(value)
"AppName" => nsg.app_name = String::new(value)
"StartDir" => ...
"icon" => ...
}
我知道我可以使用#[derive(Default)]来处理标量类型,但似乎它不适用于String类型。
1条答案
按热度按时间bq3bfh9z1#
对于这种情况,最好的选择可能是派生Default特性。
然后,用
NonSteamGame::default()
而不是::new()
示例化,如果需要保持向后兼容性,甚至可以创建new
facade: