下のディレクトリ構成のように複数ファイルからreaderモジュールを作りたい。
src
├── lib.rs
├── main.rs
├── reader
│ ├── csv_reader.rs
│ ├── jsonl_reader.rs
│ └── ltsv_reader.rs
└── reader.rs
csv_reader.rs, jsonl_reader.rs, ltsv_reader.rsにはそれぞれCsvReader, JsonlReader, LtsvReaderがある。
ファイルごとにモジュールを公開する
// lib.rs
pub mod reader;
// reader.rs
pub mod csv_reader;
pub mod jsonl_reader;
pub mod ltsv_reader;
こうすると、main.rsからはこうなる。
use mycrate::reader::csv_reader::CsvReader;
use mycrate::reader::jsonl_reader::JsonlReader;
use mycrate::reader::ltsv_reader::LtsvReader;
各ファイルがモジュールとして公開されているため、冗長な感じになる。
モジュールをまとめて公開し直す
// lib.rs
pub mod reader;
// reader.rs
mod csv_reader;
mod jsonl_reader;
mod ltsv_reader;
pub use csv_reader::CsvReader;
pub use json_reader::JsonlReader;
pub use ltsv_reader::LtsvReader;
pub useを使い、各モジュールに含まれるstructをreaderモジュールとして公開している。こうすると、main.rsからはこうなる。
use mycrate::reader::{CsvReader, JsonlReader, LtsvReader};