モジュールをディレクトリで構成する

下のディレクトリ構成のように複数ファイルから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};