
- Fixed Sabbath School parser to handle API data with extra line breaks - Cleaned up project structure and removed nested directories - Organized output to single directory structure - Removed YouTube link from contact section for cleaner layout - Improved parser robustness for multi-line content between labels - Added proper .gitignore for Rust project
109 lines
3.2 KiB
Markdown
109 lines
3.2 KiB
Markdown
# Bulletin Tools - Rust Implementation
|
|
|
|
This is a Rust rewrite of the Python church bulletin generation system. The system consists of two main binaries that work with a REST API to create and generate church bulletins.
|
|
|
|
## Project Structure
|
|
|
|
- **`bulletin-shared/`** - Shared library containing common functionality
|
|
- Configuration management
|
|
- REST API client implementation
|
|
- Data models (Bulletin, Event, Personnel)
|
|
|
|
- **`bulletin-input/`** - Binary for creating bulletin data entries
|
|
- Reads CSV schedules and conference charts
|
|
- Prompts for sermon details
|
|
- Creates bulletin records via REST API
|
|
|
|
- **`bulletin-generator/`** - Binary for generating PDF bulletins
|
|
- Fetches bulletin data from REST API
|
|
- Renders HTML templates
|
|
- Generates PDF using headless Chrome
|
|
- Uploads PDF back via REST API
|
|
|
|
## Data Files
|
|
|
|
The `data/` directory contains:
|
|
- `Quarterly schedule2021 - 2025.csv` - Personnel assignments
|
|
- `2025 Offering and Sunset Times Chart.txt` - Conference offering schedule and sunset times
|
|
- `KJV.json` - King James Version Bible text for scripture lookups
|
|
|
|
## Configuration
|
|
|
|
The shared configuration is in `shared/config.toml`:
|
|
```toml
|
|
church_name = "Your Church Name"
|
|
# Optional contact information for templates
|
|
# contact_phone = "555-123-4567"
|
|
# contact_website = "yourchurchwebsite.org"
|
|
# contact_youtube = "youtube.com/yourchurchchannel"
|
|
# contact_address = "123 Church St, Your City, ST 12345"
|
|
```
|
|
|
|
The system uses the REST API at `https://api.rockvilletollandsda.church` and requires an auth token via the `BULLETIN_API_TOKEN` environment variable or `--auth-token` parameter.
|
|
|
|
## Usage
|
|
|
|
### Building
|
|
```bash
|
|
cargo build --release
|
|
```
|
|
|
|
### Bulletin Input
|
|
```bash
|
|
# Use upcoming Saturday (default)
|
|
cargo run --bin bulletin-input
|
|
|
|
# Specify a date
|
|
cargo run --bin bulletin-input -- --date 2025-06-21
|
|
|
|
# Use different location for sunset times
|
|
cargo run --bin bulletin-input -- --location "springfield"
|
|
```
|
|
|
|
### Bulletin Generation
|
|
```bash
|
|
# Generate for upcoming Saturday
|
|
cargo run --bin bulletin-generator
|
|
|
|
# Specify a date
|
|
cargo run --bin bulletin-generator -- --date 2025-06-21
|
|
|
|
# Don't upload to PocketBase (local only)
|
|
cargo run --bin bulletin-generator -- --no-upload
|
|
|
|
# Custom output directory
|
|
cargo run --bin bulletin-generator -- --output-dir custom_output
|
|
```
|
|
|
|
## Templates
|
|
|
|
The bulletin templates are located in `bulletin-generator/templates/`:
|
|
- `bulletin_template.html` - Jinja2-style template for the bulletin layout
|
|
- `style.css` - CSS styling for the PDF output
|
|
|
|
## Dependencies
|
|
|
|
Key Rust dependencies:
|
|
- **tokio** - Async runtime
|
|
- **reqwest** - HTTP client for PocketBase API
|
|
- **serde** - Serialization/deserialization
|
|
- **chrono** - Date/time handling
|
|
- **tera** - Template engine
|
|
- **headless_chrome** - PDF generation
|
|
- **csv** - CSV parsing
|
|
- **regex** - Text parsing
|
|
|
|
## Migration from Python
|
|
|
|
This Rust implementation maintains full compatibility with the original Python system:
|
|
- Uses the new REST API backend
|
|
- Processes the same data files
|
|
- Generates identical bulletin layouts
|
|
- Follows the same workflow
|
|
|
|
The main benefits of the Rust version:
|
|
- Faster execution
|
|
- Single binary deployment
|
|
- Better error handling
|
|
- Type safety
|
|
- Reduced runtime dependencies |