- Rust 96%
- JavaScript 2.9%
- Shell 1.1%
| .cargo | ||
| .forgejo/workflows | ||
| proto | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| config.example.json | ||
| Cross.toml | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
grpc_server
gRPC / gRPC-Web server for the Home IoT project. Exposes installation services (web client, bridge), boolean sensors, and event broadcasting.
Prerequisites
- Rust (edition 2021, stable toolchain)
- Forgejo registry — This crate depends on
db_handler, which is published on a private Forgejo Cargo registry. You need access to that registry to build and run. - Configuration file (see below)
Forgejo registry setup
The registry is declared in .cargo/config.toml (sparse index URL). To authenticate:
- Obtain a token with read access to the Forgejo package registry (e.g. from your Forgejo instance: User → Settings → Access Tokens, or from the project/package permissions).
- Log in to the registry:
Alternatively, set the token in your environment so it is not stored in the Cargo credentials file:cargo login --registry forgejo <YOUR_TOKEN>export CARGO_REGISTRIES_FORGEJO_TOKEN="<YOUR_TOKEN>" - Run
cargo buildorcargo testas usual; Cargo will use the token to fetchdb_handlerfrom the registry.
Without valid credentials, cargo build will fail when resolving the db_handler dependency.
Configuration
Configuration is read by the db_handler crate via the CONFIG_FILE environment variable (path to a JSON file).
-
Copy the example file:
cp config.example.json config.json
(or create a config file at the path of your choice.) -
Adjust the fields (SQLite database URL, InfluxDB, etc.) in that file. The structure is defined by
db_handler(e.g.primary_db_url,history_db_url,history_db_org,history_db_token). -
Run the server or tests with
CONFIG_FILEset:export CONFIG_FILE=/path/to/config.json ./scripts/run.sh
A secret-free example is provided in config.example.json.
Build
cargo build
# Release
cargo build --release
# or
./scripts/build.sh
Tests
All tests (unit, integration, doc-tests) are run with:
./scripts/tests.sh
The script uses CONFIG_FILE=config_test.json (relative to the project root). Create it from the example if needed: cp config.example.json config_test.json, then run the script. Or set CONFIG_FILE to another path and run cargo test (or the script) as needed.
For integration test details (timeouts, concurrency, CORS, load), see tests/README.md.
Running
export CONFIG_FILE=/path/to/config.json
./scripts/run.sh
# or for development
./scripts/runDev.sh
Project structure
src/— Source code:main.rs, lib (shared modules)boolean_sensor/— Boolean sensor servicebroadcaster/— Event broadcastingcommon/— Errors, response channels, shared typesinstall/— Installation:web_client(gRPC-Web),bridge
proto/—.protofiles (gRPC definitions)tests/— Integration tests and test documentationscripts/— Build, test, run, and deploy scripts
License
See LICENSE (Personal Use Only — Non-Commercial).