【问题标题】:returns a value referencing data owned by the current function [1]返回引用当前函数 [1] 拥有的数据的值
【发布时间】:2022-08-15 07:14:59
【问题描述】:

错误:

我还是 rust 新手,我不知道如何从 refs 创建副本或转移所有权。

代码详情:

let result = check_email(&input).await;
let myresult = result.first().unwrap();
let responce = EmailOutput {
    input: &myresult.input,
    is_reachable: Reachable::from_str(format!("{:?}",myresult.is_reachable).as_str()),
    misc: Misc { is_disposable: myresult.misc.as_ref().unwrap().is_disposable, is_role_account: myresult.misc.as_ref().unwrap().is_role_account },
    mx: format!("{:?}", myresult.mx),
    smtp: Smtp { can_connect_smtp: myresult.smtp.as_ref().unwrap().can_connect_smtp, has_full_inbox: myresult.smtp.as_ref().unwrap().has_full_inbox, is_catch_all: myresult.smtp.as_ref().unwrap().is_catch_all, is_deliverable: myresult.smtp.as_ref().unwrap().is_deliverable, is_disabled: myresult.smtp.as_ref().unwrap().is_disabled },
    syntax: Syntax { address: myresult.syntax.address.as_ref().unwrap().to_string(), domain: myresult.syntax.domain.as_ref(), is_valid_syntax: myresult.syntax.is_valid_syntax, username: &myresult.syntax.username }
  };
let output = Box::new(responce);
  
  
Ok(Json(&*output))

【问题讨论】:

  • 我用过这个:[dependencies] owning_ref = "0.3" 并没有帮助
  • 您能解释一下为什么将对象放在 Box 中只是为了取消引用和引用它吗? Ok(Jason(response)) 不能满足您的需求吗?
  • 你的函数的签名是什么,Json的定义是什么?
  • 首先,使用clone()let myresult = result.clone().first().unwrap();
  • 其次,检查将数据转换为 json 的正确方法。比如使用serde crate。

标签: rust rust-cargo


【解决方案1】:

答案是遵循引用为<CheckEmailOutput> 的类型,并确保他的所有子结构和子枚举都具有Clone 特征然后克隆输出而不引用它。因为Json trait 不允许引用。我喜欢将代码放在这里,但我修改了多个文件并且丢失了更改。但总的来说,我最多使用#[derive(Debug, Clone, Deserialize, Serialize)],并将io::*错误枚举修改为可克隆。

let result = check_email(&input).await;
let myresult = result.first().unwrap();
let responce = EmailOutput {
    input: myresult.input, // ref was here
    is_reachable: Reachable::from_str(format!("{:?}",myresult.is_reachable).as_str()),
    misc: Misc { is_disposable: myresult.misc.clone().unwrap().is_disposable, is_role_account: myresult.misc.clone().unwrap().is_role_account },
    mx: format!("{:?}", myresult.mx.clone().unwrap()),
    smtp: Smtp { can_connect_smtp: myresult.smtp.clone().unwrap().can_connect_smtp, has_full_inbox: myresult.smtp.clone().unwrap().has_full_inbox, is_catch_all: myresult.smtp.clone().unwrap().is_catch_all, is_deliverable: myresult.smtp.clone().unwrap().is_deliverable, is_disabled: myresult.smtp.clone().unwrap().is_disabled },
    syntax: Syntax { address: myresult.syntax.address.clone().unwrap().to_string(), domain: myresult.syntax.domain.clone(), is_valid_syntax: myresult.syntax.is_valid_syntax, username: myresult.syntax.clone().username }
  };
  
Ok(Json(output))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多