gpt4 book ai didi

rust - 是否可以使用 rust 中的关键字定义字段

转载 作者:行者123 更新时间:2023-12-05 09:30:06 26 4
gpt4 key购买 nike

我正在使用 rust 编写一个 rest api,现在 flutter 客户端定义实体如下:

class WordDefinition {
String type;
String name;
List<String> values;

WordDefinition({
this.type,
this.name,
this.values,
});
}

客户端使用 type 作为实体字段名称,在 dart 中它工作正常。但是在服务器端rust中我不能这样定义字段名,在定义实体时我应该怎么做才能避免rust关键字限制?是否可以像这样在 rust 中使用 type 定义实体名称:

use rocket::serde::Deserialize;
use rocket::serde::Serialize;

#[derive(Deserialize, Serialize)]
#[allow(non_snake_case)]
pub struct WordDefinition {
pub type: String,
pub text: String,
pub translations: Vec<String>,
}

impl Default for WordDefinition {
fn default() -> Self {
WordDefinition {
type: "".to_string(),
text: "".to_string(),
translations: vec![]
}
}
}

我是这样定义的,但显然它不能像预期的那样在 rust 中工作。

最佳答案

您可以通过在关键字前加上前缀来使用“原始标识符”,例如:r#type

您可能还想在 Rust 代码中给它一个不同的名称,并使用 #[serde(rename)] 使其以名称“type”进行序列化,例如:

struct Foo {
#[serde(rename = "type")]
kind: String
}

就我个人而言,我更喜欢第二种方式,因为我觉得 r#type 打字有点烦人而且丑陋,但这只是偏好,没有“正确”的方式

关于rust - 是否可以使用 rust 中的关键字定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69871539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com