``rust
/// Abstraction of a PDU so users can have their own PDU types.
pub trait Event {
/// The
EventIdof this event.
fn event_id(&self) -> &EventId;
/// The
RoomIdof this event.
fn room_id(&self) -> &RoomId;
/// The
UserId` of this event.
fn sender(&self) -> &UserId;
// and so on...
}
/// A mapping of event type and state_key to some value T
, usually an EventId
.
pub type StateMap
/// A mapping of EventId
to T
, usually a StateEvent
.
pub type EventMap
struct StateResolution {
// For now the StateResolution struct is empty. If "caching" event_map
// between resolve
calls ends up being more efficient (probably not, as this would eat memory)
// it may have an event_map
field. The event_map
is all the events
// StateResolution
has to know about to resolve state.
}
impl StateResolution {
/// The point of this all, resolve the possibly conflicting sets of events.
pub fn resolve
}
```
The StateStore
trait is an abstraction around what ever database your server (or maybe even client) uses to store Persistant Data Units.
We use ruma
s types when deserializing any PDU or it's contents which helps avoid a lot of type checking logic synapse must do while authenticating event chains.