Rust: 找不到宏

3

我正在尝试运行来自 postgres_types 文档的 rust 代码。

这里可以找到示例代码:postgres_types

我的 rust 环境:

cargo --version cargo 1.40.0-nightly (5da4b4d47 2019-10-28)

rustc --version rustc 1.40.0-nightly (b520af6fd 2019-11-03)


main.rs

#[cfg(feature = "derive")]
use postgres_types::{ToSql, FromSql};

#[derive(Debug, ToSql, FromSql)]
enum Mood {
    Sad,
    Ok,
    Happy,
}

fn main() {
    let mood = Mood::Sad;

    println!("{:?}", mood);
}

Cargo.toml

...

[dependencies]
postgres-types = "0.1.0-alpha.1"

当我尝试使用cargo run运行时,出现以下情况:


error: cannot find derive macro `ToSql` in this scope
 --> src\main.rs:4:17
  |
4 | #[derive(Debug, ToSql, FromSql)]
  |                 ^^^^^

error: cannot find derive macro `FromSql` in this scope
 --> src\main.rs:4:24
  |
4 | #[derive(Debug, ToSql, FromSql)]
  |                        ^^^^^^^

在这里我做错了什么?很明显我漏掉了一些基础的东西。我没有正确地导入宏吗?
1个回答

6
引用文档中的话:
如果启用了派生(derive)货物功能,则可以为自定义Postgres类型派生ToSql和FromSql实现。
要启用“派生”功能,您需要将以下内容放入Cargo.toml中:
[dependencies]
postgres-types = {version = "0.1.0-alpha.1", features = ["derive"]}

谢谢,我按照要求更新了依赖项,并从 main.rs 中删除了 #[cfg(feature = "derive")],然后它就可以工作了!很高兴它能够工作,但我承认我并不完全理解这个机制。 - James Schinner
@JamesSchinner 你可以在 Cargo清单文档 中了解更多功能信息。 - SCappella
补充此答案:请确保从 postgres_types::{FromSql, ToSql}; 导入 FromSqlToSql,而不是从 postgresql 重新导出的版本。 - mirosval

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接