追記
以下の情報はすべてこのリポジトリに関するお話を抽象化したものです。
https://github.com/s3pt3mb3r/toy-arms
このリポジトリには internal
と external
と名のついたフォルダーと、featureがあります。
それぞれのフォルダー内のファイルに記述されたpublic関数は、対応するfeatureがonの場合でないと、外部のライブラリ使用者からuseできないようにしたいです!
背景、やりたいこと
自分のlibプロジェクトのsrc配下のファイルを、機能カテゴリごとにフォルダわけしたいなと思いたちました。
AとBのフォルダがあったとして、理想としては、ライブラリの使用者側でfeatures = ["A"]
を指定した場合は
rust
1use LIBRARY_NAME::A::FUNCTION_NAME; 2// use LIBRARY_NAME::B::FUNCTION_NAME などはできないようにする
という感じで指定する形にしたいです。
現在ファイル構造は以下のようになっています。
src -- lib.rs |-- A |-- mod.rs |-- A.rs |-- B |-- mod.rs |-- B.rs
src/lib.rs
は以下のようになっています。
rust
1#[cfg(feature = "A")] 2pub mod A; 3 4#[cfg(feature = "B")] 5pub mod B;
A/mod.rs
は以下のようになっています。
rust
1#[cfg(feature = "A")] 2pub mod A; 3pub use A::*;
B/mod.rs
も、Aと同じように以下のようになっています。
rust
1#[cfg(feature = "B")] 2pub mod B; 3pub use B::*;
問題
ただこれだと、現状使用者側から、features = ["A"]
と指定しても
rust
1use LIBRARY_NAME::B::FUNCTION_NAME;
がなぜか使えるようになっています。
関数や構造体の上に逐次#[cfg(feature = "A")]
などとアノテートしていけばいいのはわかるのですが、もっと楽な方法はありませんか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。