我的文件夹结构是:
├── 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
并进行必要的测试。
在您的根
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;
假设没有其他问题,这应该是您需要做的全部事情。