相关疑难解决方法(0)

如何将枚举值与整数匹配?

我可以得到这样的枚举的整数值:

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)

我怎样才能匹配枚举值或尝试转换xMyEnum

我可以看到这样的函数对枚举很有用,但它可能不存在:

impl MyEnum {
    fn from<T>(val: &T) -> Option<MyEnum>;
}
Run Code Online (Sandbox Code Playgroud)

rust

27
推荐指数
6
解决办法
2万
查看次数

如何获取枚举的整数值?

可以编写这样的结构:

enum Number {
    One = 1,
    Two = 2,
    Three = 3,
    Four = 4,
}
Run Code Online (Sandbox Code Playgroud)

但出于什么目的?我找不到任何方法来获取枚举变量的值.

rust

9
推荐指数
1
解决办法
2197
查看次数

是否可以添加自己的可导出特征,还是由编译器修复?

derive属性允许为数据结构自动实现某些特征.参考文献给出了一个例子:

#[derive(PartialEq, Clone)]
struct Foo<T> {
   a: i32,
   b: T
}
Run Code Online (Sandbox Code Playgroud)

是否可以添加自己的可导出特征,还是由编译器修复?

rust

8
推荐指数
2
解决办法
1222
查看次数

Rust/Rocket:结构体未实现特征 `serde::ser::Serialize`

我正在尝试使用 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依赖项并不令人满意。谷歌搜索声称这是我的依赖项之一内的版本不匹配 - 但我该如何自己解决这个问题?

rust rust-rocket

6
推荐指数
1
解决办法
8037
查看次数

如何修复在此范围内找不到派生宏“反序列化”?

我在以前的桌面上运行了这段代码,效果很好:

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。

rust serde

5
推荐指数
0
解决办法
1054
查看次数

为什么我得到“无法在此范围内派生宏”?

尝试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 serde rust-macros

2
推荐指数
1
解决办法
1252
查看次数

无法将 json 反序列化为 Rust 中的结构

我正在尝试将字符串反序列化为 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)

rust

1
推荐指数
1
解决办法
1095
查看次数

标签 统计

rust ×7

serde ×2

rust-macros ×1

rust-rocket ×1