微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

导入宏时编译器功能发生冲突

如何解决导入宏时编译器功能发生冲突

我正在尝试使用柴油箱中的一些宏,但他们说它们尚未导入,即使明确导入也是如此。

我认为问题来自使用功能 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 举报,一经查实,本站将立刻删除。