如何解决导入宏时编译器功能发生冲突
我正在尝试使用柴油箱中的一些宏,但他们说它们尚未导入,即使明确导入也是如此。
我认为问题来自使用功能 decl_macro。火箭需要此功能才能使用一些不安全的宏“[rustc E0658] [E] macro
是实验性的”,但我不确定。
rocket-rs 文档说使用柴油的方式是使用 rocket_contrib::databases::diesel
。
我想使用的是 rocket_contrib::databases::diesel::prelude::Insertable
或只是 diesel::prelude::Insertable
,并且 table_name 位于同一位置。
这是我的导入代码
#![feature(proc_macro_hygiene,decl_macro)]
use rocket::request::{Form,FromForm};
use rocket::Request;
use rocket::*;
#[macro_use] extern crate rocket_contrib;
use rocket_contrib::databases::diesel;
use rocket_contrib::databases::diesel::prelude::*;
// --snip--
这是说 Insertable 和宏 table_name 丢失的代码
// --snip--
#[derive(Insertable,Debug)]
#[table_name="redirects"]
pub struct Redirect<'a> {
pub alias: &'a String,pub url: &'a String,pub count: &'a i64,}
我得到的错误是这些
error: cannot find derive macro `Insertable` in this scope
--> src/main.rs:20:10
|
20 | #[derive(Insertable,Debug)]
| ^^^^^^^^^^
error: cannot find attribute `table_name` in this scope
--> src/main.rs:21:3
|
21 | #[table_name="redirects"]
| ^^^^^^^^^^
我尝试过的:
- 删除 decl_macro
- 将 proc_macro_hygiene 添加为一项功能
- 使用diesel::prelude::* 而不是rocket_contrib::databases::diesel::prelude::*
- 使用 #[macro_use] extern crate 柴油
目标是使用 Rocket_contrib,同时保持为火箭启用 decl_macro,并且仍然从柴油导入 table_name 和 Insertable 之类的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。