我可以得到这样的枚举的整数值:
enum MyEnum {
A = 1,
B,
C,
}
let x = MyEnum::C as i32;
Run Code Online (Sandbox Code Playgroud)
但我似乎无法做到这一点:
match x {
MyEnum::A => {}
MyEnum::B => {}
MyEnum::C => {}
_ => {}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能匹配枚举值或尝试转换x回MyEnum?
我可以看到这样的函数对枚举很有用,但它可能不存在:
impl MyEnum {
fn from<T>(val: &T) -> Option<MyEnum>;
}
Run Code Online (Sandbox Code Playgroud) 可以编写这样的结构:
enum Number {
One = 1,
Two = 2,
Three = 3,
Four = 4,
}
Run Code Online (Sandbox Code Playgroud)
但出于什么目的?我找不到任何方法来获取枚举变量的值.
该derive属性允许为数据结构自动实现某些特征.参考文献给出了一个例子:
#[derive(PartialEq, Clone)]
struct Foo<T> {
a: i32,
b: T
}
Run Code Online (Sandbox Code Playgroud)
是否可以添加自己的可导出特征,还是由编译器修复?
我正在尝试使用 Rocket 创建一个简单的端点。我的Cargo.toml有这些依赖项:
[dependencies]
rocket = "0.4.2"
rocket_codegen = "0.4.2"
rocket_contrib = "0.4.2"
Run Code Online (Sandbox Code Playgroud)
main.rs好像:
#[macro_use]
extern crate rocket;
use rocket_contrib::json::Json;
use serde::Serialize;
#[get("/org")]
fn getorg() -> Json<Org> {
Json(Org {
id: Option::from(25),
name: "Incredible-Customer".to_string(),
})
}
#[derive(Serialize)]
pub struct Org {
pub id: Option<i32>,
pub name: String,
}
fn main() {
rocket::ignite().mount("/", routes![getorg]).launch();
}
Run Code Online (Sandbox Code Playgroud)
编译结果出现错误:
[dependencies]
rocket = "0.4.2"
rocket_codegen = "0.4.2"
rocket_contrib = "0.4.2"
Run Code Online (Sandbox Code Playgroud)
我对如何调查这个错误感到非常困惑。是依赖问题吗?为什么?我已将rocket依赖项版本化为同一依赖项,但显然这种serde依赖项并不令人满意。谷歌搜索声称这是我的依赖项之一内的版本不匹配 - 但我该如何自己解决这个问题?
我在以前的桌面上运行了这段代码,效果很好:
use serde::Deserialize;
#[derive(Deserialize)]
struct Foo {
bar: i64,
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
货物.toml:
[dependencies]
serde = "1.0"
Run Code Online (Sandbox Code Playgroud)
但现在我明白了
use serde::Deserialize;
#[derive(Deserialize)]
struct Foo {
bar: i64,
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
什么会导致问题?我正在使用 Rust 1.33.0。
尝试cargo build针对此代码:
#![allow(unused)]
use serde::{Deserialize, Serialize};
use serde_json::{Result, Value};
#[derive(Serialize, Deserialize,Debug)]
struct Repository{
r#type: String,
url: String,
}
fn main() {
println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)
这是 cargo.toml 文件:
[package]
name = "demo_err"
version = "0.1.0"
authors = ["Onorio Catenacci <catenacci@ieee.org>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
serde = "1.0.104"
serde_json = "1.0.44"
Run Code Online (Sandbox Code Playgroud)
当然,我的真实代码要大一些,但这是我可以重现错误的最小代码。
我收到以下错误:
Compiling demo_err v0.1.0 (U:\skunkworks\rust\demo_err)
error: cannot find derive macro `Serialize` in this scope
--> src\main.rs:9:10
|
9 | …Run Code Online (Sandbox Code Playgroud) 我正在尝试将字符串反序列化为 Rust 中的结构。以下代码仅来自json_serde文档。
use serde::{Deserialize, Serialize};
use serde_json::Result;
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u8,
phones: Vec<String>,
}
fn main() {
let data = r#"
{
"name": "John Doe",
"age": 43,
"phones": [
"+44 1234567",
"+44 2345678"
]
}"#;
// Parse the string of data into a Person object. This is exactly the
// same function as the one that produced serde_json::Value above, but
// now we are asking it for a Person as output.
let …Run Code Online (Sandbox Code Playgroud)