fix: Update some of the trait bounds to be not broken

This commit is contained in:
timedout 2026-02-19 03:38:12 +00:00
parent c69e7c7d1b
commit dfd89425a1
No known key found for this signature in database
GPG key ID: 0FA334385D0B689F
2 changed files with 139 additions and 129 deletions

173
Cargo.lock generated
View file

@ -173,9 +173,9 @@ checksum = "9dbc3a507a82b17ba0d98f6ce8fd6954ea0c8152e98009d36a40d8dcc8ce078a"
[[package]]
name = "askama"
version = "0.15.4"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08e1676b346cadfec169374f949d7490fd80a24193d37d2afce0c047cf695e57"
checksum = "bb7125972258312e79827b60c9eb93938334100245081cf701a2dee981b17427"
dependencies = [
"askama_macros",
"itoa",
@ -186,9 +186,9 @@ dependencies = [
[[package]]
name = "askama_derive"
version = "0.15.4"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7661ff56517787343f376f75db037426facd7c8d3049cef8911f1e75016f3a37"
checksum = "8ba5e7259a1580c61571e3116ebaaa01e3c001b2132b17c4cc5c70780ca3e994"
dependencies = [
"askama_parser",
"basic-toml",
@ -203,18 +203,18 @@ dependencies = [
[[package]]
name = "askama_macros"
version = "0.15.4"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "713ee4dbfd1eb719c2dab859465b01fa1d21cb566684614a713a6b7a99a4e47b"
checksum = "236ce20b77cb13506eaf5024899f4af6e12e8825f390bd943c4c37fd8f322e46"
dependencies = [
"askama_derive",
]
[[package]]
name = "askama_parser"
version = "0.15.4"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d62d674238a526418b30c0def480d5beadb9d8964e7f38d635b03bf639c704c"
checksum = "f3c63392767bb2df6aa65a6e1e3b80fd89bb7af6d58359b924c0695620f1512e"
dependencies = [
"rustc-hash",
"serde",
@ -235,7 +235,7 @@ dependencies = [
"nom 7.1.3",
"num-traits",
"rusticata-macros",
"thiserror 2.0.18",
"thiserror 2.0.17",
"time",
]
@ -338,7 +338,7 @@ dependencies = [
"num-traits",
"pastey",
"rayon",
"thiserror 2.0.18",
"thiserror 2.0.17",
"v_frame",
"y4m",
]
@ -685,9 +685,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
[[package]]
name = "bytes"
version = "1.11.1"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
[[package]]
name = "bytesize"
@ -735,7 +735,7 @@ dependencies = [
"semver",
"serde",
"serde_json",
"thiserror 2.0.18",
"thiserror 2.0.17",
]
[[package]]
@ -745,7 +745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77"
dependencies = [
"serde",
"toml 0.9.12+spec-1.1.0",
"toml 0.9.11+spec-1.1.0",
]
[[package]]
@ -792,9 +792,9 @@ dependencies = [
[[package]]
name = "chrono"
version = "0.4.43"
version = "0.4.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118"
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
dependencies = [
"num-traits",
]
@ -812,9 +812,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.59"
version = "4.5.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499"
checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394"
dependencies = [
"clap_builder",
"clap_derive",
@ -822,9 +822,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.5.59"
version = "4.5.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24"
checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00"
dependencies = [
"anstyle",
"clap_lex",
@ -832,9 +832,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.55"
version = "4.5.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
dependencies = [
"heck",
"proc-macro2",
@ -844,9 +844,9 @@ dependencies = [
[[package]]
name = "clap_lex"
version = "1.0.0"
version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831"
checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32"
[[package]]
name = "cmake"
@ -1032,13 +1032,13 @@ dependencies = [
"serde_regex",
"smallstr",
"smallvec",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tikv-jemalloc-ctl",
"tikv-jemalloc-sys",
"tikv-jemallocator",
"tokio",
"tokio-metrics",
"toml 0.9.12+spec-1.1.0",
"toml 0.9.11+spec-1.1.0",
"tracing",
"tracing-core",
"tracing-subscriber",
@ -1159,7 +1159,7 @@ dependencies = [
"conduwuit_service",
"futures",
"rand 0.8.5",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tracing",
]
@ -1912,9 +1912,9 @@ dependencies = [
[[package]]
name = "futures"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
@ -1927,9 +1927,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [
"futures-core",
"futures-sink",
@ -1937,15 +1937,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]]
name = "futures-executor"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [
"futures-core",
"futures-task",
@ -1954,15 +1954,15 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-macro"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
@ -1971,21 +1971,21 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
[[package]]
name = "futures-task"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
[[package]]
name = "futures-util"
version = "0.3.32"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [
"futures-channel",
"futures-core",
@ -1995,6 +1995,7 @@ dependencies = [
"futures-task",
"memchr",
"pin-project-lite",
"pin-utils",
"slab",
]
@ -2201,7 +2202,7 @@ dependencies = [
"rand 0.9.2",
"ring",
"serde",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tinyvec",
"tokio",
"tracing",
@ -2225,7 +2226,7 @@ dependencies = [
"resolv-conf",
"serde",
"smallvec",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tokio",
"tracing",
]
@ -2751,7 +2752,7 @@ dependencies = [
"percent-encoding",
"rustls",
"rustls-native-certs",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tokio",
"tokio-rustls",
"tokio-stream",
@ -2768,9 +2769,9 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8"
[[package]]
name = "libc"
version = "0.2.182"
version = "0.2.180"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
[[package]]
name = "libfuzzer-sys"
@ -3418,7 +3419,7 @@ dependencies = [
"futures-sink",
"js-sys",
"pin-project-lite",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tracing",
]
@ -3448,7 +3449,7 @@ dependencies = [
"opentelemetry_sdk",
"prost",
"reqwest",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tokio",
"tonic",
"tracing",
@ -3479,7 +3480,7 @@ dependencies = [
"opentelemetry",
"percent-encoding",
"rand 0.9.2",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tokio",
"tokio-stream",
]
@ -3739,9 +3740,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.106"
version = "1.0.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
dependencies = [
"unicode-ident",
]
@ -3867,7 +3868,7 @@ dependencies = [
"rustc-hash",
"rustls",
"socket2 0.6.1",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tokio",
"tracing",
"web-time",
@ -3888,7 +3889,7 @@ dependencies = [
"rustls",
"rustls-pki-types",
"slab",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tinyvec",
"tracing",
"web-time",
@ -3910,9 +3911,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.44"
version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
dependencies = [
"proc-macro2",
]
@ -4012,7 +4013,7 @@ dependencies = [
"rand 0.9.2",
"rand_chacha 0.9.0",
"simd_helpers",
"thiserror 2.0.18",
"thiserror 2.0.17",
"v_frame",
"wasm-bindgen",
]
@ -4074,9 +4075,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.12.3"
version = "1.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
dependencies = [
"aho-corasick",
"memchr",
@ -4226,7 +4227,7 @@ dependencies = [
"serde",
"serde_html_form",
"serde_json",
"thiserror 2.0.18",
"thiserror 2.0.17",
"url",
"web-time",
]
@ -4254,7 +4255,7 @@ dependencies = [
"serde_html_form",
"serde_json",
"smallvec",
"thiserror 2.0.18",
"thiserror 2.0.17",
"time",
"tracing",
"url",
@ -4281,7 +4282,7 @@ dependencies = [
"serde",
"serde_json",
"smallvec",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tracing",
"url",
"web-time",
@ -4306,7 +4307,7 @@ dependencies = [
"ruma-events",
"serde",
"serde_json",
"thiserror 2.0.18",
"thiserror 2.0.17",
"tracing",
]
@ -4316,7 +4317,7 @@ version = "0.9.5"
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=3126cb5eea991ec40590e54d8c9d75637650641a#3126cb5eea991ec40590e54d8c9d75637650641a"
dependencies = [
"js_int",
"thiserror 2.0.18",
"thiserror 2.0.17",
]
[[package]]
@ -4369,7 +4370,7 @@ dependencies = [
"serde_json",
"sha2",
"subslice",
"thiserror 2.0.18",
"thiserror 2.0.17",
]
[[package]]
@ -4516,7 +4517,7 @@ dependencies = [
"futures-util",
"pin-project",
"thingbuf",
"thiserror 2.0.18",
"thiserror 2.0.17",
"unicode-segmentation",
"unicode-width 0.2.2",
]
@ -4544,7 +4545,7 @@ checksum = "d55ae5ea09894b6d5382621db78f586df37ef18ab581bf32c754e75076b124b1"
dependencies = [
"arraydeque",
"smallvec",
"thiserror 2.0.18",
"thiserror 2.0.17",
]
[[package]]
@ -4732,7 +4733,7 @@ dependencies = [
"rand 0.9.2",
"serde",
"serde_json",
"thiserror 2.0.18",
"thiserror 2.0.17",
"time",
"url",
"uuid",
@ -5074,9 +5075,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "2.0.116"
version = "2.0.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb"
checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
dependencies = [
"proc-macro2",
"quote",
@ -5132,7 +5133,7 @@ dependencies = [
"lazy-regex",
"minimad",
"serde",
"thiserror 2.0.18",
"thiserror 2.0.17",
"unicode-width 0.1.14",
]
@ -5157,11 +5158,11 @@ dependencies = [
[[package]]
name = "thiserror"
version = "2.0.18"
version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
dependencies = [
"thiserror-impl 2.0.18",
"thiserror-impl 2.0.17",
]
[[package]]
@ -5177,9 +5178,9 @@ dependencies = [
[[package]]
name = "thiserror-impl"
version = "2.0.18"
version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
dependencies = [
"proc-macro2",
"quote",
@ -5323,9 +5324,9 @@ dependencies = [
[[package]]
name = "tokio-metrics"
version = "0.4.8"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12c48227f311eaa0b0ae5860089860509d7249e0e5da8f7a5d17f4808a1ad387"
checksum = "a34e87dd30650518a4e041bca77c931f3f5a19621eecdcd794f5c1813bca9e98"
dependencies = [
"futures-util",
"pin-project-lite",
@ -5381,9 +5382,9 @@ dependencies = [
[[package]]
name = "toml"
version = "0.9.12+spec-1.1.0"
version = "0.9.11+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46"
dependencies = [
"indexmap",
"serde_core",
@ -5440,9 +5441,9 @@ dependencies = [
[[package]]
name = "toml_parser"
version = "1.0.8+spec-1.1.0"
version = "1.0.6+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0742ff5ff03ea7e67c8ae6c93cac239e0d9784833362da3f9a9c1da8dfefcbdc"
checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44"
dependencies = [
"winnow",
]
@ -6263,7 +6264,7 @@ dependencies = [
"nom 7.1.3",
"oid-registry",
"rusticata-macros",
"thiserror 2.0.18",
"thiserror 2.0.17",
"time",
]

View file

@ -18,27 +18,28 @@ use std::{
use futures::{Future, FutureExt, Stream, StreamExt, TryFutureExt, TryStreamExt};
use itertools::Itertools;
use ruma::{
EventId, Int, MilliSecondsSinceUnixEpoch, OwnedEventId, RoomVersionId,
events::{
StateEventType, TimelineEventType,
room::member::{MembershipState, RoomMemberEventContent},
},
int,
room::member::{MembershipState, RoomMemberEventContent}, StateEventType,
TimelineEventType,
}, int, EventId, Int, MilliSecondsSinceUnixEpoch,
OwnedEventId,
RoomVersionId,
};
use serde_json::from_str as from_json_str;
pub(crate) use self::error::Error;
use self::power_levels::PowerLevelsContentFields;
pub use self::{event_auth::iterative_auth_checks::auth_check, room_version::RoomVersion};
use crate::utils::TryFutureExtExt;
use crate::{
Pdu, debug, err, error as log_error,
matrix::{Event, StateKey},
debug, err, error as log_error, matrix::{Event, StateKey},
state_res::{
event_auth::auth_events::auth_types_for_event, room_version::StateResolutionVersion,
},
trace,
utils::stream::{BroadbandExt, IterStream, ReadyExt, TryBroadbandExt, WidebandExt},
warn,
Pdu,
};
/// A mapping of event type and state_key to some value `T`, usually an
@ -72,7 +73,7 @@ type Result<T, E = Error> = crate::Result<T, E>;
/// event is part of the same room.
//#[tracing::instrument(level = "debug", skip(state_sets, auth_chain_sets,
//#[tracing::instrument(level event_fetch))]
pub async fn resolve<'a, Sets, SetIter, Hasher, FE, Exists>(
pub async fn resolve<'a, Sets, SetIter, Hasher, FE, FR, Exists>(
room_version: &RoomVersionId,
state_sets: Sets,
auth_chain_sets: &'a [HashSet<OwnedEventId, Hasher>],
@ -80,7 +81,8 @@ pub async fn resolve<'a, Sets, SetIter, Hasher, FE, Exists>(
event_exists: &Exists,
) -> Result<StateMap<OwnedEventId>>
where
FE: AsyncFn(OwnedEventId) -> Result<Option<Pdu>> + Sync,
FE: Fn(&EventId) -> FR + Sync,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send,
Exists: AsyncFn(OwnedEventId) -> bool + Sync,
Sets: IntoIterator<IntoIter = SetIter> + Send,
SetIter: Iterator<Item = &'a StateMap<OwnedEventId>> + Clone + Send,
@ -360,13 +362,14 @@ where
/// The power level is negative because a higher power level is equated to an
/// earlier (further back in time) origin server timestamp.
#[tracing::instrument(level = "debug", skip_all)]
async fn reverse_topological_power_sort<FE>(
async fn reverse_topological_power_sort<FE, FR>(
events_to_sort: Vec<OwnedEventId>,
auth_diff: &HashSet<OwnedEventId>,
fetch_event: &FE,
) -> Result<Vec<OwnedEventId>>
where
FE: AsyncFn(OwnedEventId) -> Result<Option<Pdu>> + Sync,
FE: Fn(&EventId) -> FR + Sync,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send,
{
debug!("reverse topological sort of power events");
@ -403,7 +406,7 @@ where
.get(&event_id)
.ok_or_else(|| Error::NotFound(String::new()))?;
let ev = fetch_event(event_id)
let ev = fetch_event(&event_id)
.await?
.ok_or_else(|| Error::NotFound(String::new()))?;
@ -543,13 +546,14 @@ where
/// Do NOT use this any where but topological sort, we find the power level for
/// the eventId at the eventId's generation (we walk backwards to `EventId`s
/// most recent previous power level event).
async fn get_power_level_for_sender<FE>(event_id: &EventId, fetch_event: &FE) -> Result<Int>
async fn get_power_level_for_sender<FE, FR>(event_id: &EventId, fetch_event: &FE) -> Result<Int>
where
FE: AsyncFn(OwnedEventId) -> Result<Option<Pdu>> + Sync,
FE: Fn(&EventId) -> FR + Sync,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send,
{
debug!("fetch event ({event_id}) senders power level");
let event = fetch_event(event_id.to_owned()).await?;
let event = fetch_event(event_id).await?;
let auth_events = event.as_ref().map(Event::auth_events);
@ -557,7 +561,7 @@ where
.into_iter()
.flatten()
.stream()
.broadn_filter_map(5, |aid| fetch_event(aid.to_owned()))
.broad_filter_map(|aid| fetch_event(aid).unwrap_or_default())
.ready_find(|aev| is_type_and_key(aev, &TimelineEventType::RoomPowerLevels, ""))
.await;
@ -588,14 +592,15 @@ where
/// the the `fetch_event` closure and verify each event using the
/// `event_auth::auth_check` function.
#[tracing::instrument(level = "trace", skip_all)]
async fn iterative_auth_check<FE, S>(
async fn iterative_auth_check<FE, FR, S>(
room_version: &RoomVersion,
events_to_check: S,
unconflicted_state: StateMap<OwnedEventId>,
fetch_event: &FE,
) -> Result<StateMap<OwnedEventId>>
where
FE: AsyncFn(&EventId) -> Result<Option<Pdu>, Error> + Sync + Send,
FE: Fn(&EventId) -> FR,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send + Sync,
S: Stream<Item = OwnedEventId> + Send,
{
debug!("starting iterative auth check");
@ -757,13 +762,14 @@ where
/// after the most recent are depth 0, the events before (with the first power
/// level as a parent) will be marked as depth 1. depth 1 is "older" than depth
/// 0.
async fn mainline_sort<FE>(
async fn mainline_sort<FE, FR>(
to_sort: &[OwnedEventId],
resolved_power_level: Option<OwnedEventId>,
fetch_event: &FE,
) -> Result<Vec<OwnedEventId>>
where
FE: AsyncFn(OwnedEventId) -> Result<Option<Pdu>> + Sync,
FE: Fn(&EventId) -> FR + Sync,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send,
{
debug!("mainline sort of events");
@ -777,13 +783,13 @@ where
while let Some(p) = pl {
mainline.push(p.clone());
let event = fetch_event(p.clone())
let event = fetch_event(&p)
.await?
.ok_or_else(|| Error::NotFound(format!("Failed to find {p}")))?;
pl = None;
for aid in event.auth_events() {
let ev = fetch_event(aid.to_owned())
let ev = fetch_event(aid)
.await?
.ok_or_else(|| Error::NotFound(format!("Failed to find {aid}")))?;
@ -805,7 +811,7 @@ where
.iter()
.stream()
.broad_filter_map(async |ev_id| {
fetch_event(ev_id.clone())
fetch_event(ev_id)
.await
.ok()
.flatten()
@ -831,13 +837,14 @@ where
/// Get the mainline depth from the `mainline_map` or finds a power_level event
/// that has an associated mainline depth.
async fn get_mainline_depth<FE>(
async fn get_mainline_depth<FE, FR>(
mut event: Option<Pdu>,
mainline_map: &HashMap<OwnedEventId, usize>,
fetch_event: &FE,
) -> Result<usize>
where
FE: AsyncFn(OwnedEventId) -> Result<Option<Pdu>> + Sync,
FE: Fn(&EventId) -> FR + Sync,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send,
{
while let Some(sort_ev) = event {
debug!(event_id = sort_ev.event_id().as_str(), "mainline");
@ -849,7 +856,7 @@ where
event = None;
for aid in sort_ev.auth_events() {
let aev = fetch_event(aid.to_owned())
let aev = fetch_event(aid)
.await?
.ok_or_else(|| Error::NotFound(format!("Failed to find {aid}")))?;
@ -863,18 +870,19 @@ where
Ok(0)
}
async fn add_event_and_auth_chain_to_graph<FE>(
async fn add_event_and_auth_chain_to_graph<FE, FR>(
graph: &mut HashMap<OwnedEventId, HashSet<OwnedEventId>>,
event_id: OwnedEventId,
auth_diff: &HashSet<OwnedEventId>,
fetch_event: &FE,
) where
FE: AsyncFn(OwnedEventId) -> Result<Option<Pdu>> + Sync,
FE: Fn(&EventId) -> FR + Sync,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send,
{
let mut state = vec![event_id];
while let Some(eid) = state.pop() {
graph.entry(eid.clone()).or_default();
let event = fetch_event(eid.clone()).await.ok().flatten();
let event = fetch_event(&eid).await.ok().flatten();
let auth_events = event.as_ref().map(Event::auth_events).into_iter().flatten();
// Prefer the store to event as the store filters dedups the events
@ -893,11 +901,12 @@ async fn add_event_and_auth_chain_to_graph<FE>(
}
}
async fn is_power_event_id<FE>(event_id: &EventId, fetch: &FE) -> bool
async fn is_power_event_id<FE, FR>(event_id: &EventId, fetch: &FE) -> bool
where
FE: AsyncFn(OwnedEventId) -> Result<Option<Pdu>> + Sync,
FE: Fn(&EventId) -> FR + Sync,
FR: Future<Output = Result<Option<Pdu>, Error>> + Send,
{
match fetch(event_id.to_owned()).await.as_ref() {
match fetch(event_id).await.as_ref() {
| Ok(Some(state)) => is_power_event(state),
| _ => false,
}
@ -959,23 +968,23 @@ mod tests {
use maplit::{hashmap, hashset};
use rand::seq::SliceRandom;
use ruma::{
MilliSecondsSinceUnixEpoch, OwnedEventId, RoomVersionId,
events::{
StateEventType, TimelineEventType,
room::join_rules::{JoinRule, RoomJoinRulesEventContent},
},
int, uint,
room::join_rules::{JoinRule, RoomJoinRulesEventContent}, StateEventType,
TimelineEventType,
}, int, uint,
MilliSecondsSinceUnixEpoch,
OwnedEventId, RoomVersionId,
};
use serde_json::{json, value::to_raw_value as to_raw_json_value};
use super::{
StateMap, is_power_event,
room_version::RoomVersion,
is_power_event, room_version::RoomVersion,
test_utils::{
INITIAL_EVENTS, TestStore, alice, bob, charlie, do_check, ella, event_id,
member_content_ban, member_content_join, room_id, to_init_pdu_event, to_pdu_event,
zara,
alice, bob, charlie, do_check, ella, event_id, member_content_ban, member_content_join,
room_id, to_init_pdu_event, to_pdu_event, zara, TestStore,
INITIAL_EVENTS,
},
StateMap,
};
use crate::{
debug,
@ -1005,7 +1014,7 @@ mod tests {
.map(|pdu| pdu.event_id.clone())
.collect::<Vec<_>>();
let fetcher = |id| ready(events.get(&id).cloned());
let fetcher = |id| ready(Ok(events.get(id).cloned()));
let sorted_power_events =
super::reverse_topological_power_sort(power_events, &auth_chain, &fetcher)
.await