For Developers
This section contains information for contributors and developers working on xportrs.
Getting Started
Prerequisites
- Rust 1.70 or later
- Git
Clone and Build
git clone https://github.com/rubentalstra/xportrs.git
cd xportrs
cargo build
Run Tests
cargo test --all-features
Run Clippy
cargo clippy -- -D warnings
Project Structure
xportrs/
├── src/
│ ├── lib.rs # Public API exports
│ ├── dataset/ # Dataset, Column, ColumnData
│ ├── schema/ # Schema derivation
│ ├── validate/ # Validation rules
│ ├── xpt/
│ │ └── v5/ # XPT V5 implementation
│ │ ├── read/ # Reading logic
│ │ └── write/ # Writing logic
│ ├── config/ # Configuration types
│ ├── error/ # Error types
│ └── metadata/ # Metadata types
├── tests/ # Integration tests
├── docs/ # mdbook documentation
└── benches/ # Benchmarks (if any)
Adding New Features
Adding a New Validation Rule
- Add variant to
Issueenum insrc/validate/issues.rs - Implement
severity()method for the new variant - Implement
Displayfor the new variant - Add check in
src/validate/checks_v5.rs - Add tests
Adding a New Column Type
- Add variant to
ColumnDataenum insrc/dataset/domain_dataset.rs - Handle in reader (
src/xpt/v5/read/reader.rs) - Handle in writer (
src/xpt/v5/write/writer.rs) - Add
Fromimplementation - Add tests
Supporting a New Agency
- Add variant to
Agencyenum - Add agency-specific validation in
src/validate/checks_v5.rs - Document in regulatory section
Code Style
- Follow Rust API Guidelines
- Use
cargo fmtbefore committing - Ensure
cargo clippy -- -D warningspasses - Add doc comments for public items
- Include examples in documentation
Testing
Unit Tests
Located alongside the code in mod tests blocks.
Integration Tests
Located in tests/ directory:
tests/v5/read.rs- Reading teststests/v5/write.rs- Writing teststests/api_guidelines.rs- API compliance tests
Test Data
Test XPT files are in tests/data/.
Documentation
Building Docs
cd docs
mdbook build
Serving Locally
cd docs
mdbook serve
Then open http://localhost:3000
Adding Pages
- Create
.mdfile in appropriate directory - Add entry to
SUMMARY.md - Use mermaid for diagrams
Pull Request Guidelines
- Fork the repository
- Create a feature branch
- Make changes with tests
- Ensure CI passes
- Submit PR with clear description
Release Process
- Update version in
Cargo.toml - Update
CHANGELOG.md - Create git tag
- CI publishes to crates.io