进口导致圆形模组进口

问题描述 投票:0回答:1

我的文件夹结构是:

├── Cargo.toml
├── program
│   ├── Cargo.lock
│   ├── Cargo.toml
│   └── src
│       ├── instruction.rs
│       ├── lib.rs
│       ├── mod.rs
│       └── state.rs
├── program.json
└── src
    └── lib.rs

/program/src/lib.rs
中,我想使用
instruction.rs
state.rs

/src/lib.rs
(测试文件)中,我试图调用该程序
lib.rs

程序lib.rs:

use super::instruction::LiquidityInstruction;
use super::state::LiquidityParams;

以及 src lib.rs 文件:

#[path = "../program/src/lib.rs"]
mod lib;

但是它不起作用。

例如运行程序lib.rs:

use super::state::LiquidityParams;
  | ^^^^^ there are too many leading `super` keywords

如果我更改程序 lib.rs:

#[path = "./mod.rs"]
pub mod instruction;
pub mod state;

use crate::instruction::instruction::LiquidityInstruction;
use crate::state::LiquidityParams;

出现错误:

error: circular modules: src/lib.rs -> src/./mod.rs -> src/lib.rs
 --> src/./mod.rs:2:1
  |
2 | pub mod lib;
  | ^^^^^^^^^^^^

它变得相当混乱。有人可以帮忙吗?

我期望在程序lib.rs中调用

instruciton.rs
(文件中的
LiquidityInstruction
枚举)和
state.rs
(文件中的
LiquidityParams
),并在
program lib.rs中调用
src lib.rs
 
这样我就可以从
lib
访问
state
instruction
src lib
并进行必要的测试。

rust rust-cargo rust-crates
1个回答
0
投票

在您的根

Cargo.toml
中,创建对
program
的板条箱的路径依赖:

[dependencies]
program = { path = "./program" }

这样你的根

lib.rs
就可以通过
program
访问它,例如:

use program::instruction::LiquidityInstruction;
use program::state::LiquidityParams;

您通常不想使用

#[path]
属性从另一个板条箱中提取文件 - 它很可能由于错误的
crate
super
指令而导致错误的导入。


在您的

program
板条箱中,您需要删除
mod.rs
并简单地在
lib.rs
中声明您的模块,如下所示:

pub mod instruction;
pub mod state;

假设没有其他问题,这应该是您需要做的全部事情。

© www.soinside.com 2019 - 2024. All rights reserved.