Compare commits

..

10 Commits

Author SHA1 Message Date
3db65c39fd u 2025-03-09 09:38:01 +08:00
c8e4008e21 u 2025-03-09 09:36:46 +08:00
8635b434cd t 2025-03-09 09:34:08 +08:00
strawberry
f5667c6292
dont fail req deserialisation over empty push response body
Signed-off-by: strawberry <strawberry@puppygock.gay>
2025-02-07 17:59:02 -05:00
Jason Volk
7da56bf7f4 fix some tests
Signed-off-by: Jason Volk <jason@zemos.net>
2025-02-05 11:26:08 +00:00
Jason Volk
0120acc116 fix doc lints
Signed-off-by: Jason Volk <jason@zemos.net>
2025-02-05 10:34:43 +00:00
Jason Volk
fa3abc9431 fix missing api feature for ruma-common from ruma-server-util
Signed-off-by: Jason Volk <jason@zemos.net>
2025-02-05 10:33:32 +00:00
Jason Volk
8cfc0a6bc6 fix missing pushrules in test
Signed-off-by: Jason Volk <jason@zemos.net>
2025-02-05 10:17:16 +00:00
strawberry
517ac45722
dont alias receive_ephemeral to de.sorunome.msc2409.push_ephemeral
Signed-off-by: strawberry <strawberry@puppygock.gay>
2025-02-05 01:25:09 -05:00
Jason Volk
010ae6daad add missing TimelineEventType -> StateEventType conversion replacing anti-pattern to_string().into()
Signed-off-by: Jason Volk <jason@zemos.net>
2025-01-29 23:03:04 +00:00
9 changed files with 68 additions and 18 deletions

View File

@ -103,11 +103,7 @@ pub struct Registration {
/// Whether the application service wants to receive ephemeral data.
///
/// Defaults to `false`.
#[serde(
default,
skip_serializing_if = "ruma_common::serde::is_default",
alias = "de.sorunome.msc2409.push_ephemeral"
)]
#[serde(default, skip_serializing_if = "ruma_common::serde::is_default")]
pub receive_ephemeral: bool,
}

View File

@ -1286,6 +1286,9 @@ mod tests {
"enabled": true
}
],
"room": [],
"sender": [],
"underride": [],
})
);
}

View File

@ -48,31 +48,31 @@ pub fn expand_event_type_enum(
let mut res = TokenStream::new();
res.extend(
generate_enum("TimelineEventType", &timeline, &ruma_events)
generate_enum("TimelineEventType", &timeline, &ruma_events, Some(&state))
.unwrap_or_else(syn::Error::into_compile_error),
);
res.extend(
generate_enum("StateEventType", &state, &ruma_events)
generate_enum("StateEventType", &state, &ruma_events, None)
.unwrap_or_else(syn::Error::into_compile_error),
);
res.extend(
generate_enum("MessageLikeEventType", &message, &ruma_events)
generate_enum("MessageLikeEventType", &message, &ruma_events, None)
.unwrap_or_else(syn::Error::into_compile_error),
);
res.extend(
generate_enum("EphemeralRoomEventType", &ephemeral, &ruma_events)
generate_enum("EphemeralRoomEventType", &ephemeral, &ruma_events, None)
.unwrap_or_else(syn::Error::into_compile_error),
);
res.extend(
generate_enum("RoomAccountDataEventType", &room_account, &ruma_events)
generate_enum("RoomAccountDataEventType", &room_account, &ruma_events, None)
.unwrap_or_else(syn::Error::into_compile_error),
);
res.extend(
generate_enum("GlobalAccountDataEventType", &global_account, &ruma_events)
generate_enum("GlobalAccountDataEventType", &global_account, &ruma_events, None)
.unwrap_or_else(syn::Error::into_compile_error),
);
res.extend(
generate_enum("ToDeviceEventType", &to_device, &ruma_events)
generate_enum("ToDeviceEventType", &to_device, &ruma_events, None)
.unwrap_or_else(syn::Error::into_compile_error),
);
@ -83,6 +83,7 @@ fn generate_enum(
ident: &str,
input: &[&Vec<EventEnumEntry>],
ruma_common: &TokenStream,
other: Option<&[&Vec<EventEnumEntry>]>,
) -> syn::Result<TokenStream> {
let serde = quote! { #ruma_common::exports::serde };
let enum_doc = format!("The type of `{}` this is.", ident.strip_suffix("Type").unwrap());
@ -101,6 +102,18 @@ fn generate_enum(
}
}
let mut other_deduped: Vec<&EventEnumEntry> = vec![];
for item in other.iter().flat_map(|o| o.iter()).copied().flatten() {
if let Some(idx) = other_deduped.iter().position(|e| e.ev_type == item.ev_type) {
// If there is a variant without config attributes use that
if other_deduped[idx].attrs != item.attrs && item.attrs.is_empty() {
other_deduped[idx] = item;
}
} else {
other_deduped.push(item);
}
}
let event_types = deduped.iter().map(|e| &e.ev_type);
let variants: Vec<_> = deduped
@ -189,6 +202,38 @@ fn generate_enum(
None
};
let from_ident_for_state = if ident == "TimelineEventType" {
let match_arms: Vec<_> = other_deduped
.iter()
.map(|e| {
let v = e.to_variant()?;
let ident_var = v.match_arm(quote! { #ident });
let state_var = v.ctor(quote! { Self });
Ok(if e.has_type_fragment() {
quote! { #ident_var (_s) => #state_var (_s) }
} else {
quote! { #ident_var => #state_var }
})
})
.collect::<syn::Result<_>>()?;
Some(quote! {
#[allow(deprecated)]
impl ::std::convert::From<#ident> for StateEventType {
fn from(s: #ident) -> Self {
match s {
#(#match_arms,)*
_ => panic!("EventType is not a StateEventType"),
//_ => compile_error!("EventType is not a StateEventType"),
}
}
}
})
} else {
None
};
Ok(quote! {
#[doc = #enum_doc]
///
@ -269,5 +314,6 @@ fn generate_enum(
}
#from_ident_for_timeline
#from_ident_for_state
})
}

View File

@ -48,6 +48,7 @@ pub mod v1 {
/// pushkeys and remove the associated pushers. It may not necessarily be the notification
/// in the request that failed: it could be that a previous notification to the same
/// pushkey failed. May be empty.
#[serde(default)]
pub rejected: Vec<String>,
}

View File

@ -18,7 +18,7 @@ all-features = true
headers = "0.4.0"
http = { workspace = true }
http-auth = { version = "0.1.9", default-features = false }
ruma-common = { workspace = true }
ruma-common = { workspace = true, features = ["api"] }
thiserror = { workspace = true }
tracing = { workspace = true }

View File

@ -151,7 +151,7 @@ where
/// }"#;
///
/// let object = serde_json::from_str(input).unwrap();
/// let canonical = ruma_signatures::canonical_json(&object).unwrap();
/// let canonical = ruma_signatures::canonical_json(object).unwrap();
///
/// assert_eq!(canonical, r#"{"日":1,"本":2}"#);
/// ```
@ -204,7 +204,7 @@ pub fn canonical_json(object: CanonicalJsonObject) -> Result<String, Error> {
/// public_key_map.insert("domain".into(), public_key_set);
///
/// // Verify at least one signature for each entity in `public_key_map`.
/// assert!(ruma_signatures::verify_json(&public_key_map, &object).is_ok());
/// assert!(ruma_signatures::verify_json(&public_key_map, object).is_ok());
/// ```
pub fn verify_json(
public_key_map: &PublicKeyMap,

View File

@ -323,6 +323,7 @@ where
.map(|mem| mem.membership)
.unwrap_or(MembershipState::Leave);
println!("===========incoming event: {:?} target_user:{target_user:?} sender:{sender:?}", incoming_event.content());
if !valid_membership_change(
room_version,
target_user,
@ -671,6 +672,7 @@ fn valid_membership_change(
}
}
MembershipState::Leave => {
println!("==============sender: {} target_user:{target_user} target_user_current_membership:{:?}", sender, target_user_current_membership);
if sender == target_user {
let allow = target_user_current_membership == MembershipState::Join
|| target_user_current_membership == MembershipState::Invite

View File

@ -1223,7 +1223,7 @@ mod tests {
let exists = |id: <PduEvent as Event>::Id| ready(ev_map.get(&*id).is_some());
let state_sets = [state_at_bob, state_at_charlie];
let auth_chain = state_sets
let auth_chain: Vec<_> = state_sets
.iter()
.map(|map| store.auth_event_ids(room_id(), map.values().cloned().collect()).unwrap())
.collect();
@ -1330,7 +1330,7 @@ mod tests {
let ev_map = &store.0;
let state_sets = [state_set_a, state_set_b];
let auth_chain = state_sets
let auth_chain: Vec<_> = state_sets
.iter()
.map(|map| store.auth_event_ids(room_id(), map.values().cloned().collect()).unwrap())
.collect();

View File

@ -112,7 +112,7 @@ pub(crate) async fn do_check(
.collect::<Vec<_>>()
);
let auth_chain_sets = state_sets
let auth_chain_sets: Vec<_> = state_sets
.iter()
.map(|map| {
store.auth_event_ids(room_id(), map.values().cloned().collect()).unwrap()
@ -626,6 +626,7 @@ pub(crate) mod event {
}
}
#[allow(refining_impl_trait)]
fn prev_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + Send + '_> {
match &self.rest {
Pdu::RoomV1Pdu(ev) => Box::new(ev.prev_events.iter().map(|(id, _)| id)),
@ -635,6 +636,7 @@ pub(crate) mod event {
}
}
#[allow(refining_impl_trait)]
fn auth_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + Send + '_> {
match &self.rest {
Pdu::RoomV1Pdu(ev) => Box::new(ev.auth_events.iter().map(|(id, _)| id)),