diff --git a/README.md b/README.md index d5a37561..b1365819 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,34 @@ Would it be possible to abstract state res into a `ruma-state-res` crate? I've been thinking about something along the lines of ```rust -// The would need to be Serialize/Deserialize to save state -struct StateResV2 { +/// StateMap is just a wrapper/deserialize target for a PDU. +struct StateEvent { + content: serde_json::Value, + room_id: RoomId, + event_id: EventId, + // ... and so on +} + +/// A mapping of event type and state_key to some value `T`, usually an `EventId`. +pub type StateMap = BTreeMap<(EventType, String), T>; + + +struct StateResolution { // Should any information be kept or should all of it be fetched from the - // StateStore trait?, - state_graph: Something, + // StateStore trait? + event_map: BTreeMap, // fields for temp storage during resolution?? + /// The events that conflict and their auth chains. conflicting_events: StateMap>, } -impl StateResV2 { - /// The point of this all add nonconflicting events to the graph - /// and resolve and add conflicting events. +impl StateResolution { + /// The point of this all. Resolve the conflicting set of . fn resolve(&mut self, events: Vec>) -> StateMap { } } -// The tricky part of making a good abstraction +// The tricky part, making a good abstraction... trait StateStore { /// Return a single event based on the EventId. fn get_event(&self, event_id: &EventId) -> Result; @@ -27,7 +38,6 @@ trait StateStore { /// Returns a Vec of the related auth events to the given `event`. fn auth_event_ids(&self, room_id: &RoomId, event_ids: &[EventId]) -> Result, String>; - } ``` diff --git a/tests/state_res.rs b/tests/state_res.rs index 05dc24cb..e36f30ac 100644 --- a/tests/state_res.rs +++ b/tests/state_res.rs @@ -2,13 +2,12 @@ use std::{ cell::RefCell, collections::{BTreeMap, BTreeSet}, convert::TryFrom, - time::{Duration, SystemTime, UNIX_EPOCH}, + time::UNIX_EPOCH, }; use maplit::btreemap; use ruma::{ events::{ - pdu::Pdu, room::{ join_rules::JoinRule, member::{MemberEventContent, MembershipState}, @@ -17,7 +16,7 @@ use ruma::{ }, identifiers::{EventId, RoomId, RoomVersionId, UserId}, }; -use serde_json::{from_value as from_json_value, json, Value as JsonValue}; +use serde_json::{json, Value as JsonValue}; use state_res::{ResolutionResult, StateEvent, StateMap, StateResolution, StateStore}; use tracing_subscriber as tracer; @@ -290,8 +289,6 @@ fn INITIAL_EDGES() -> Vec { } fn do_check(events: &[StateEvent], edges: Vec>, expected_state_ids: Vec) { - use itertools::Itertools; - // to activate logging use `RUST_LOG=debug cargo t one_test_only` let _ = LOGGER.call_once(|| { tracer::fmt()