state-res: Make all pub structs non_exhaustive

This commit is contained in:
Devin Ragotzy 2021-06-17 17:20:43 -04:00 committed by Jonas Platte
parent e05aad184e
commit fae5385753
6 changed files with 93 additions and 11 deletions

View File

@ -16,6 +16,7 @@ all-features = true
[features]
unstable-pre-spec = ["ruma-events/unstable-pre-spec"]
unstable-exhaustive-types = []
[dependencies]
itertools = "0.10.0"

View File

@ -4,6 +4,9 @@
// `cargo bench unknown option --save-baseline`.
// To pass args to criterion, use this form
// `cargo bench --bench <name of the bench> -- --save-baseline <name>`.
#![allow(clippy::exhaustive_structs)]
use std::{
collections::{BTreeMap, BTreeSet},
convert::{TryFrom, TryInto},
@ -372,7 +375,7 @@ where
auth_events,
prev_events,
depth: uint!(0),
hashes: EventHash { sha256: "".into() },
hashes: EventHash::new(String::new()),
signatures: btreemap! {},
}),
})
@ -627,6 +630,8 @@ pub mod event {
_ => false,
},
Pdu::RoomV3Pdu(event) => event.state_key == Some("".into()),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -634,6 +639,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => serde_json::from_value(ev.content.clone()),
Pdu::RoomV3Pdu(ev) => serde_json::from_value(ev.content.clone()),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -641,6 +648,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.origin_server_ts,
Pdu::RoomV3Pdu(ev) => &ev.origin_server_ts,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -652,6 +661,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.sender,
Pdu::RoomV3Pdu(ev) => &ev.sender,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -659,6 +670,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.redacts.as_ref(),
Pdu::RoomV3Pdu(ev) => ev.redacts.as_ref(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -666,18 +679,24 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.room_id,
Pdu::RoomV3Pdu(ev) => &ev.room_id,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
pub fn kind(&self) -> EventType {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.kind.clone(),
Pdu::RoomV3Pdu(ev) => ev.kind.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
pub fn state_key(&self) -> Option<String> {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.state_key.clone(),
Pdu::RoomV3Pdu(ev) => ev.state_key.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -686,6 +705,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.origin.clone(),
Pdu::RoomV3Pdu(ev) => ev.origin.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -693,6 +714,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.prev_events.iter().map(|(id, _)| id).cloned().collect(),
Pdu::RoomV3Pdu(ev) => ev.prev_events.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -700,6 +723,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.auth_events.iter().map(|(id, _)| id).cloned().collect(),
Pdu::RoomV3Pdu(ev) => ev.auth_events.to_vec(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -707,6 +732,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.content.clone(),
Pdu::RoomV3Pdu(ev) => ev.content.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -714,6 +741,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.unsigned,
Pdu::RoomV3Pdu(ev) => &ev.unsigned,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -723,6 +752,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(_) => maplit::btreemap! {},
Pdu::RoomV3Pdu(ev) => ev.signatures.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -730,6 +761,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.hashes,
Pdu::RoomV3Pdu(ev) => &ev.hashes,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -737,6 +770,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.depth,
Pdu::RoomV3Pdu(ev) => &ev.depth,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -748,6 +783,8 @@ pub mod event {
Pdu::RoomV3Pdu(ev) => {
ev.kind == ev_type && ev.state_key.as_deref() == Some(state_key)
}
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -760,6 +797,8 @@ pub mod event {
match self.rest {
Pdu::RoomV1Pdu(_) => RoomVersionId::Version1,
Pdu::RoomV3Pdu(_) => RoomVersionId::Version6,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
}

View File

@ -33,6 +33,7 @@ pub type StateMap<T> = BTreeMap<(EventType, String), T>;
pub type EventMap<T> = BTreeMap<EventId, T>;
#[derive(Default)]
#[allow(clippy::exhaustive_structs)]
pub struct StateResolution;
impl StateResolution {

View File

@ -26,6 +26,7 @@ pub enum StateResolutionVersion {
V2,
}
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
pub struct RoomVersion {
/// The version this room is set to.
pub version: RoomVersionId,

View File

@ -1,4 +1,4 @@
#![allow(clippy::or_fun_call, clippy::expect_fun_call, dead_code)]
#![allow(clippy::exhaustive_structs, dead_code)]
use std::{
collections::{BTreeMap, BTreeSet},
@ -60,14 +60,14 @@ pub fn do_check(
for pair in INITIAL_EDGES().windows(2) {
if let [a, b] = &pair {
graph.entry(a.clone()).or_insert(btreeset![]).insert(b.clone());
graph.entry(a.clone()).or_insert_with(BTreeSet::new).insert(b.clone());
}
}
for edge_list in edges {
for pair in edge_list.windows(2) {
if let [a, b] = &pair {
graph.entry(a.clone()).or_insert(btreeset![]).insert(b.clone());
graph.entry(a.clone()).or_insert_with(BTreeSet::new).insert(b.clone());
}
}
}
@ -173,11 +173,13 @@ pub fn do_check(
let mut expected_state = StateMap::new();
for node in expected_state_ids {
let ev = event_map.get(&node).expect(&format!(
"{} not found in {:?}",
node.to_string(),
event_map.keys().map(ToString::to_string).collect::<Vec<_>>(),
));
let ev = event_map.get(&node).unwrap_or_else(|| {
panic!(
"{} not found in {:?}",
node.to_string(),
event_map.keys().map(ToString::to_string).collect::<Vec<_>>()
)
});
let key = (ev.kind(), ev.state_key());
@ -334,7 +336,7 @@ pub fn to_init_pdu_event(
auth_events: vec![],
prev_events: vec![],
depth: uint!(0),
hashes: EventHash { sha256: "".into() },
hashes: EventHash::new("".to_owned()),
signatures: btreemap! {},
}),
})
@ -374,7 +376,7 @@ where
auth_events,
prev_events,
depth: uint!(0),
hashes: EventHash { sha256: "".into() },
hashes: EventHash::new("".to_owned()),
signatures: btreemap! {},
}),
})
@ -589,18 +591,24 @@ pub mod event {
_ => false,
},
Pdu::RoomV3Pdu(event) => event.state_key == Some("".into()),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
pub fn deserialize_content<C: serde::de::DeserializeOwned>(&self) -> serde_json::Result<C> {
match &self.rest {
Pdu::RoomV1Pdu(ev) => serde_json::from_value(ev.content.clone()),
Pdu::RoomV3Pdu(ev) => serde_json::from_value(ev.content.clone()),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
pub fn origin_server_ts(&self) -> &MilliSecondsSinceUnixEpoch {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.origin_server_ts,
Pdu::RoomV3Pdu(ev) => &ev.origin_server_ts,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
pub fn event_id(&self) -> &EventId {
@ -611,6 +619,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.sender,
Pdu::RoomV3Pdu(ev) => &ev.sender,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -618,6 +628,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.redacts.as_ref(),
Pdu::RoomV3Pdu(ev) => ev.redacts.as_ref(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -625,18 +637,24 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.room_id,
Pdu::RoomV3Pdu(ev) => &ev.room_id,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
pub fn kind(&self) -> EventType {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.kind.clone(),
Pdu::RoomV3Pdu(ev) => ev.kind.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
pub fn state_key(&self) -> String {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.state_key.clone().unwrap(),
Pdu::RoomV3Pdu(ev) => ev.state_key.clone().unwrap(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -645,6 +663,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.origin.clone(),
Pdu::RoomV3Pdu(ev) => ev.origin.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -652,6 +672,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.prev_events.iter().map(|(id, _)| id).cloned().collect(),
Pdu::RoomV3Pdu(ev) => ev.prev_events.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -659,6 +681,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.auth_events.iter().map(|(id, _)| id).cloned().collect(),
Pdu::RoomV3Pdu(ev) => ev.auth_events.to_vec(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -666,6 +690,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => ev.content.clone(),
Pdu::RoomV3Pdu(ev) => ev.content.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -673,6 +699,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.unsigned,
Pdu::RoomV3Pdu(ev) => &ev.unsigned,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -682,6 +710,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(_) => maplit::btreemap! {},
Pdu::RoomV3Pdu(ev) => ev.signatures.clone(),
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -689,6 +719,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.hashes,
Pdu::RoomV3Pdu(ev) => &ev.hashes,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -696,6 +728,8 @@ pub mod event {
match &self.rest {
Pdu::RoomV1Pdu(ev) => &ev.depth,
Pdu::RoomV3Pdu(ev) => &ev.depth,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -707,6 +741,8 @@ pub mod event {
Pdu::RoomV3Pdu(ev) => {
ev.kind == ev_type && ev.state_key.as_deref() == Some(state_key)
}
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
@ -719,6 +755,8 @@ pub mod event {
match self.rest {
Pdu::RoomV1Pdu(_) => RoomVersionId::Version1,
Pdu::RoomV3Pdu(_) => RoomVersionId::Version6,
#[cfg(not(feature = "unstable-exhaustive-types"))]
_ => unreachable!("new PDU version"),
}
}
}

View File

@ -103,12 +103,14 @@ unstable-exhaustive-types = [
"ruma-federation-api/unstable-exhaustive-types",
"ruma-identity-service-api/unstable-exhaustive-types",
"ruma-push-gateway-api/unstable-exhaustive-types",
"ruma-state-res/unstable-exhaustive-types"
]
unstable-pre-spec = [
"ruma-common/unstable-pre-spec",
"ruma-client-api/unstable-pre-spec",
"ruma-events/unstable-pre-spec",
"ruma-federation-api/unstable-pre-spec",
"ruma-state-res/unstable-pre-spec"
#"ruma-identity-service-api/unstable-pre-spec",
#"ruma-push-gateway-api/unstable-pre-spec",
]