Rust 如何从结构验证选项参数值

Rust 如何从结构验证选项参数值,rust,rust-cargo,Rust,Rust Cargo,当我试图在更新过程中对选项参数进行验证时,我正在处理这个问题。下面是代码的演示版本。请帮帮我。最好使用匹配模式或if条件语句 #[derive(Deserialize)] struct UserUpdateReq { uuid: Option<i32>, first_name: Option<String>, last_name: Option<String>, } fn update_user(req: Json) => Re

当我试图在更新过程中对选项参数进行验证时,我正在处理这个问题。下面是代码的演示版本。请帮帮我。最好使用匹配模式或if条件语句

#[derive(Deserialize)]
struct UserUpdateReq {
    uuid: Option<i32>,
    first_name: Option<String>,
    last_name: Option<String>,
}

fn update_user(req: Json) => Result<Response<Vec<i32>>, String>{

   let req: UserUpdateReq = try_s!(json::from_value(req));

   // Here I need to validate optional parameters
   // checking both parameters have a value. In case both are None, return err message
   // if any one value is present update that value.

}
#[派生(反序列化)]
结构UserUpdateReq{
uuid:选项,
第一个名称:选项,
姓氏:选项,
}
fn update_user(req:Json)=>结果{
让req:UserUpdateReq=try_s!(json::from_value(req));
//这里我需要验证可选参数
//检查两个参数是否都有值。如果两个参数都没有值,则返回错误消息
//如果存在任何一个值,则更新该值。
}

如果您想检查是否至少提供了
名字
姓氏
中的一个,您可以根据具体情况使用:

match (req.first_name, req.last_name) {
    (Some(first_name), Some(last_name)) => {
        // update both
    }
    (None, Some(last_name)) => {
        // update last name
    }
    (Some(first_name), None) => {
        // update first name
    }
    (None, None) => {
        // error
    }


“两个参数”?您有3个参数。你是说所有的参数吗?“如果存在任何一个值,则更新该值”更新位置?您似乎没有将用户存储在任何地方,我也不知道
响应
应该是什么意思,也不知道
Vec
应该来自哪里。不清楚您的问题是什么。如果所有3个成员都是必需的,为什么您要将它们包装在
选项中
?仅供参考,与问题无关,但UUID是128位,而不是32位。
if req.first_name.is_none() && req.last_name.is_none () {
    // error
} else {
    if let Some(first_name) = req.first_name {
        // update first name
    }
    if let Some(last_name) = req.last_name {
        // update last name
    }
}