## 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.