forked from lavina/lavina
47 lines
1.6 KiB
Markdown
47 lines
1.6 KiB
Markdown
|
## Dependency diagram of the project
|
||
|
|
||
|
```mermaid
|
||
|
graph TD;
|
||
|
lavina-->mgmt-api;
|
||
|
lavina-->projection-irc;
|
||
|
lavina-->projection-xmpp;
|
||
|
lavina-->lavina-core;
|
||
|
|
||
|
projection-irc-->proto-irc;
|
||
|
projection-irc-->lavina-core;
|
||
|
|
||
|
projection-xmpp-->proto-xmpp;
|
||
|
projection-xmpp-->lavina-core;
|
||
|
|
||
|
sim-irc-->proto-irc;
|
||
|
sim-irc-->mgmt-api;
|
||
|
|
||
|
sim-xmpp-->proto-xmpp;
|
||
|
sim-xmpp-->mgmt-api;
|
||
|
|
||
|
workspace-->lavina;
|
||
|
workspace-->sim-irc;
|
||
|
workspace-->sim-xmpp;
|
||
|
```
|
||
|
|
||
|
A few rules:
|
||
|
- Only projections should be direct deps of `lavina`, there is no need to depend on `proto-*` crates.
|
||
|
- On the other hand, projections should not be dependencies of `sim-*` crates.
|
||
|
- `lavina-core` does not depend on protocol-specific crates.
|
||
|
|
||
|
## Lavina
|
||
|
|
||
|
**lavina-core**. This crate implements the core functionality of the server not specific to public interfaces. It includes handling general persistence, message casts, in future room authorization and cross-node communication.
|
||
|
|
||
|
**lavina**. The application crate. It's used to link other crates together and build the final binary with support for all protocols.
|
||
|
|
||
|
**mgmt-api**. Model definitions for management API to be used both in the server and client implementations.
|
||
|
|
||
|
## IRC
|
||
|
|
||
|
**proto-irc**. Protocol definition for IRC, includes both server-side and client-side messages and both serialization and deserialization where needed.
|
||
|
|
||
|
**projection-irc**. Projection of lavina-core onto the IRC client-to-server protocol implementation.
|
||
|
|
||
|
**sim-irc**. Future implementation of IRC client simulator to be used in integration and load testing.
|