# How to contribute
This document provides an overview and some general notes about all the code
in this repository.
## Motivations and trade-offs
The `zbus_systemd` library tries to achieve the following goals:
* provide coverage for all systemd DBus services in a single crate
* build on top of a Rust-native DBus stack, thanks to `zbus`
* statically generate library code directly from systemd definitions
* directly rely on generated interfaces
## Code generation
This project uses [just](https://github.com/casey/just) to perform code-generation.
To refresh all interfaces after making some changes, you can directly run `just` in the top directory.
All modules are generated from the corresponding systemd doc-page.
The code-generator source lives under `codegen/`, and it can be configured through the `codegen.toml` file.
The interfaces are re-generated on each major systemd release, in a process that involves:
* updating the git submodule at `codegen/systemd/` to the latest version
* parsing all the relevant XML files `codegen/systemd/man/`
* writing a `generated.rs` for each service module
* running `cargo fmt` on the whole crate