diff --git a/Cargo.lock b/Cargo.lock
index 2a80291..c6c1769 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -213,9 +213,9 @@ dependencies = [
[[package]]
name = "const_fn"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
+checksum = "076a6803b0dacd6a88cfe64deba628b01533ff5ef265687e6938280c1afd0a28"
[[package]]
name = "constant_time_eq"
@@ -356,9 +356,9 @@ checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
[[package]]
name = "dtoa"
-version = "0.4.7"
+version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88d7ed2934d741c6b37e33e3832298e8850b53fd2d2bea03873375596c7cea4e"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
[[package]]
name = "either"
@@ -402,9 +402,9 @@ dependencies = [
[[package]]
name = "figment"
-version = "0.10.3"
+version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c38799b106530aa30f774f7fca6d8f7e5f6234a79f427c4fad3c975eaf678931"
+checksum = "0ca029e813a72b7526d28273d25f3e4a2f365d1b7a1018a6f93ec9053a119763"
dependencies = [
"atomic",
"pear",
@@ -693,9 +693,9 @@ dependencies = [
[[package]]
name = "hyper"
-version = "0.14.4"
+version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8e946c2b1349055e0b72ae281b238baf1a3ea7307c7e9f9d64673bdd9c26ac7"
+checksum = "8bf09f61b52cfcf4c00de50df88ae423d6c02354e385a86341133b5338630ad1"
dependencies = [
"bytes",
"futures-channel",
@@ -708,7 +708,7 @@ dependencies = [
"httpdate",
"itoa",
"pin-project",
- "socket2",
+ "socket2 0.4.0",
"tokio",
"tower-service",
"tracing",
@@ -764,6 +764,7 @@ checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"
dependencies = [
"autocfg",
"hashbrown",
+ "serde",
]
[[package]]
@@ -793,7 +794,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7"
dependencies = [
- "socket2",
+ "socket2 0.3.19",
"widestring",
"winapi",
"winreg 0.6.2",
@@ -846,9 +847,9 @@ checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
[[package]]
name = "js-sys"
-version = "0.3.49"
+version = "0.3.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc15e39392125075f60c95ba416f5381ff6c3a948ff02ab12464715adf56c821"
+checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c"
dependencies = [
"wasm-bindgen",
]
@@ -884,9 +885,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.91"
+version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7"
+checksum = "56d855069fafbb9b344c0f962150cd2c1187975cb1c22c1522c240d8c4986714"
[[package]]
name = "linked-hash-map"
@@ -896,9 +897,9 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
[[package]]
name = "lock_api"
-version = "0.4.2"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"
+checksum = "5a3c91c24eae6777794bb1997ad98bbb87daf92890acab859f7eaa4320333176"
dependencies = [
"scopeguard",
]
@@ -956,9 +957,9 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
[[package]]
name = "memoffset"
-version = "0.6.2"
+version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc14fc54a812b4472b4113facc3e44d099fbc0ea2ce0551fa5c703f8edfbfd38"
+checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d"
dependencies = [
"autocfg",
]
@@ -1315,10 +1316,11 @@ dependencies = [
[[package]]
name = "proc-macro-crate"
-version = "0.1.5"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92"
dependencies = [
+ "thiserror",
"toml",
]
@@ -1336,9 +1338,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
[[package]]
name = "proc-macro2"
-version = "1.0.24"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
dependencies = [
"unicode-xid",
]
@@ -1623,7 +1625,7 @@ dependencies = [
[[package]]
name = "ruma"
version = "0.0.2"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"assign",
"js_int",
@@ -1643,7 +1645,7 @@ dependencies = [
[[package]]
name = "ruma-api"
version = "0.17.0-alpha.2"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"http",
"percent-encoding",
@@ -1658,7 +1660,7 @@ dependencies = [
[[package]]
name = "ruma-api-macros"
version = "0.17.0-alpha.2"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -1669,7 +1671,7 @@ dependencies = [
[[package]]
name = "ruma-appservice-api"
version = "0.2.0-alpha.2"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"ruma-api",
"ruma-common",
@@ -1683,7 +1685,7 @@ dependencies = [
[[package]]
name = "ruma-client-api"
version = "0.10.0-alpha.2"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"assign",
"http",
@@ -1701,21 +1703,24 @@ dependencies = [
[[package]]
name = "ruma-common"
-version = "0.3.0-alpha.1"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+version = "0.3.1"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
+ "indexmap",
"js_int",
"maplit",
"ruma-identifiers",
"ruma-serde",
"serde",
"serde_json",
+ "tracing",
+ "wildmatch",
]
[[package]]
name = "ruma-events"
version = "0.22.0-alpha.2"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"js_int",
"ruma-common",
@@ -1729,7 +1734,7 @@ dependencies = [
[[package]]
name = "ruma-events-macros"
version = "0.22.0-alpha.2"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -1740,7 +1745,7 @@ dependencies = [
[[package]]
name = "ruma-federation-api"
version = "0.1.0-alpha.1"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"js_int",
"ruma-api",
@@ -1754,8 +1759,8 @@ dependencies = [
[[package]]
name = "ruma-identifiers"
-version = "0.18.0-alpha.1"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+version = "0.18.1"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"paste",
"rand",
@@ -1768,8 +1773,8 @@ dependencies = [
[[package]]
name = "ruma-identifiers-macros"
-version = "0.18.0-alpha.1"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+version = "0.18.1"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"proc-macro2",
"quote",
@@ -1779,13 +1784,13 @@ dependencies = [
[[package]]
name = "ruma-identifiers-validation"
-version = "0.2.0"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+version = "0.2.2"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
[[package]]
name = "ruma-identity-service-api"
version = "0.0.1"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"ruma-api",
"ruma-common",
@@ -1798,7 +1803,7 @@ dependencies = [
[[package]]
name = "ruma-push-gateway-api"
version = "0.0.1"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"js_int",
"ruma-api",
@@ -1812,8 +1817,8 @@ dependencies = [
[[package]]
name = "ruma-serde"
-version = "0.3.0"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+version = "0.3.1"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"form_urlencoded",
"itoa",
@@ -1825,8 +1830,8 @@ dependencies = [
[[package]]
name = "ruma-serde-macros"
-version = "0.3.0"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+version = "0.3.1"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"proc-macro-crate",
"proc-macro2",
@@ -1836,8 +1841,8 @@ dependencies = [
[[package]]
name = "ruma-signatures"
-version = "0.6.0-alpha.1"
-source = "git+https://github.com/ruma/ruma?rev=f196f5b6f164973d6b343af31ab4e0457f743675#f196f5b6f164973d6b343af31ab4e0457f743675"
+version = "0.6.0"
+source = "git+https://github.com/ruma/ruma?rev=a310ccc318a4eb51062923d570d5a86c1468e8a1#a310ccc318a4eb51062923d570d5a86c1468e8a1"
dependencies = [
"base64 0.13.0",
"ring",
@@ -1915,9 +1920,9 @@ dependencies = [
[[package]]
name = "security-framework"
-version = "2.1.2"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d493c5f39e02dfb062cd8f33301f90f9b13b650e8c1b1d0fd75c19dd64bff69d"
+checksum = "3670b1d2fdf6084d192bc71ead7aabe6c06aa2ea3fbd9cc3ac111fa5c2b1bd84"
dependencies = [
"bitflags",
"core-foundation",
@@ -1928,9 +1933,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
-version = "2.1.1"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee48cdde5ed250b0d3252818f646e174ab414036edb884dde62d80a3ac6082d"
+checksum = "3676258fd3cfe2c9a0ec99ce3038798d847ce3e4bb17746373eb9f0f1ac16339"
dependencies = [
"core-foundation-sys",
"libc",
@@ -2081,6 +2086,16 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "socket2"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
[[package]]
name = "spin"
version = "0.5.2"
@@ -2105,7 +2120,7 @@ checksum = "3015a7d0a5fd5105c91c3710d42f9ccf0abfb287d62206484dcc67f9569a6483"
[[package]]
name = "state-res"
version = "0.1.0"
-source = "git+https://github.com/timokoesters/state-res?branch=improvements#625c37cb776b381a83ab7ee58b13e32506849648"
+source = "git+https://github.com/ruma/state-res?rev=af450d0fe2b0e1c890284d0bc3b9d6d4008ac475#af450d0fe2b0e1c890284d0bc3b9d6d4008ac475"
dependencies = [
"itertools 0.10.0",
"log",
@@ -2167,9 +2182,9 @@ checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
[[package]]
name = "syn"
-version = "1.0.64"
+version = "1.0.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f"
+checksum = "3ce15dd3ed8aa2f8eeac4716d6ef5ab58b6b9256db41d7e1a0224c2788e8fd87"
dependencies = [
"proc-macro2",
"quote",
@@ -2300,9 +2315,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.1.1"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023"
+checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342"
dependencies = [
"tinyvec_macros",
]
@@ -2634,9 +2649,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
[[package]]
name = "wasm-bindgen"
-version = "0.2.72"
+version = "0.2.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fe8f61dba8e5d645a4d8132dc7a0a66861ed5e1045d2c0ed940fab33bac0fbe"
+checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9"
dependencies = [
"cfg-if",
"serde",
@@ -2646,9 +2661,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.72"
+version = "0.2.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "046ceba58ff062da072c7cb4ba5b22a37f00a302483f7e2a6cdc18fedbdc1fd3"
+checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae"
dependencies = [
"bumpalo",
"lazy_static",
@@ -2661,9 +2676,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.22"
+version = "0.4.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73157efb9af26fb564bb59a009afd1c7c334a44db171d280690d0c3faaec3468"
+checksum = "81b8b767af23de6ac18bf2168b690bed2902743ddf0fb39252e36f9e2bfc63ea"
dependencies = [
"cfg-if",
"js-sys",
@@ -2673,9 +2688,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.72"
+version = "0.2.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ef9aa01d36cda046f797c57959ff5f3c615c9cc63997a8d545831ec7976819b"
+checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -2683,9 +2698,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.72"
+version = "0.2.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96eb45c1b2ee33545a813a92dbb53856418bf7eb54ab34f7f7ff1448a5b3735d"
+checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c"
dependencies = [
"proc-macro2",
"quote",
@@ -2696,15 +2711,15 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.72"
+version = "0.2.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7148f4696fb4960a346eaa60bbfb42a1ac4ebba21f750f75fc1375b098d5ffa"
+checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489"
[[package]]
name = "web-sys"
-version = "0.3.49"
+version = "0.3.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59fe19d70f5dacc03f6e46777213facae5ac3801575d56ca6cbd4c93dcd12310"
+checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -2732,6 +2747,12 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+[[package]]
+name = "wildmatch"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07ae7ce410f81ba679081aac1d4874f3b1c328535b630209aa5b4cdaaf895e20"
+
[[package]]
name = "winapi"
version = "0.3.9"
diff --git a/Cargo.toml b/Cargo.toml
index 453bc8e..7bd1557 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,12 +18,12 @@ rocket = { git = "https://github.com/SergioBenitez/Rocket.git", rev = "93e62c86e
#rocket = { git = "https://github.com/timokoesters/Rocket.git", branch = "empty_parameters", default-features = false, features = ["tls"] }
# Used for matrix spec type definitions and helpers
-ruma = { git = "https://github.com/ruma/ruma", features = ["rand", "appservice-api", "client-api", "federation-api", "push-gateway-api", "unstable-pre-spec", "unstable-synapse-quirks", "unstable-exhaustive-types"], rev = "f196f5b6f164973d6b343af31ab4e0457f743675" }
+ruma = { git = "https://github.com/ruma/ruma", rev = "a310ccc318a4eb51062923d570d5a86c1468e8a1", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "unstable-pre-spec", "unstable-exhaustive-types"] }
#ruma = { git = "https://github.com/DevinR528/ruma", features = ["rand", "client-api", "federation-api", "push-gateway-api", "unstable-exhaustive-types", "unstable-pre-spec", "unstable-synapse-quirks"], branch = "verified-export" }
#ruma = { path = "../ruma/ruma", features = ["unstable-exhaustive-types", "rand", "client-api", "federation-api", "push-gateway-api", "unstable-pre-spec", "unstable-synapse-quirks"] }
# Used when doing state resolution
-state-res = { git = "https://github.com/timokoesters/state-res", branch = "improvements", features = ["unstable-pre-spec"] }
+state-res = { git = "https://github.com/ruma/state-res", rev = "af450d0fe2b0e1c890284d0bc3b9d6d4008ac475", features = ["unstable-pre-spec"] }
# TODO: remove the gen-eventid feature
#state-res = { git = "https://github.com/ruma/state-res", branch = "main", features = ["unstable-pre-spec", "gen-eventid"] }
#state-res = { git = "https://github.com/ruma/state-res", rev = "1621a491a9e867a1ad4dff9f2f92b0c1e2d44aa0", features = ["unstable-pre-spec", "gen-eventid"] }
diff --git a/src/client_server/account.rs b/src/client_server/account.rs
index 10f5d75..4c5b60c 100644
--- a/src/client_server/account.rs
+++ b/src/client_server/account.rs
@@ -21,7 +21,7 @@ use ruma::{
},
EventType,
},
- RoomAliasId, RoomId, RoomVersionId, UserId,
+ push, RoomAliasId, RoomId, RoomVersionId, UserId,
};
use register::RegistrationKind;
@@ -181,7 +181,7 @@ pub async fn register_route(
EventType::PushRules,
&ruma::events::push_rules::PushRulesEvent {
content: ruma::events::push_rules::PushRulesEventContent {
- global: crate::push_rules::default_pushrules(&user_id),
+ global: push::Ruleset::server_default(&user_id),
},
},
&db.globals,
diff --git a/src/client_server/media.rs b/src/client_server/media.rs
index 57fc2b0..f9350e0 100644
--- a/src/client_server/media.rs
+++ b/src/client_server/media.rs
@@ -46,7 +46,7 @@ pub async fn create_content_route(
db.flush().await?;
Ok(create_content::Response {
- content_uri: mxc,
+ content_uri: mxc.try_into().expect("Invalid mxc:// URI"),
blurhash: None,
}
.into())
diff --git a/src/client_server/push.rs b/src/client_server/push.rs
index 9de8c16..e37e660 100644
--- a/src/client_server/push.rs
+++ b/src/client_server/push.rs
@@ -10,10 +10,7 @@ use ruma::{
},
},
events::{push_rules, EventType},
- push::{
- ConditionalPushRuleInit, ContentPushRule, OverridePushRule, PatternedPushRuleInit,
- RoomPushRule, SenderPushRule, SimplePushRuleInit, UnderridePushRule,
- },
+ push::{ConditionalPushRuleInit, PatternedPushRuleInit, SimplePushRuleInit},
};
#[cfg(feature = "conduit_bin")]
@@ -67,29 +64,24 @@ pub async fn get_pushrule_route(
let rule = match body.kind {
RuleKind::Override => global
.override_
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.clone().into()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.clone().into()),
RuleKind::Underride => global
.underride
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.clone().into()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.clone().into()),
RuleKind::Sender => global
.sender
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.clone().into()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.clone().into()),
RuleKind::Room => global
.room
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.clone().into()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.clone().into()),
RuleKind::Content => global
.content
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.clone().into()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.clone().into()),
RuleKind::_Custom(_) => None,
};
@@ -105,14 +97,15 @@ pub async fn get_pushrule_route(
#[cfg_attr(
feature = "conduit_bin",
- put("/_matrix/client/r0/pushrules/<_>/<_>/<_>", data = "
")
+ put("/_matrix/client/r0/pushrules/<_>/<_>/<_>", data = "")
)]
-#[tracing::instrument(skip(db, body))]
+#[tracing::instrument(skip(db, req))]
pub async fn set_pushrule_route(
db: State<'_, Database>,
- body: Ruma>,
+ req: Ruma>,
) -> ConduitResult {
- let sender_user = body.sender_user.as_ref().expect("user is authenticated");
+ let sender_user = req.sender_user.as_ref().expect("user is authenticated");
+ let body = req.body;
if body.scope != "global" {
return Err(Error::BadRequest(
@@ -132,107 +125,62 @@ pub async fn set_pushrule_route(
let global = &mut event.content.global;
match body.kind {
RuleKind::Override => {
- if let Some(rule) = global
- .override_
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.override_.remove(&rule);
- }
-
- global.override_.insert(OverridePushRule(
+ global.override_.replace(
ConditionalPushRuleInit {
- actions: body.actions.clone(),
+ actions: body.actions,
default: false,
enabled: true,
- rule_id: body.rule_id.clone(),
- conditions: body.conditions.clone(),
+ rule_id: body.rule_id,
+ conditions: body.conditions,
}
.into(),
- ));
+ );
}
RuleKind::Underride => {
- if let Some(rule) = global
- .underride
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.underride.remove(&rule);
- }
-
- global.underride.insert(UnderridePushRule(
+ global.underride.replace(
ConditionalPushRuleInit {
- actions: body.actions.clone(),
+ actions: body.actions,
default: false,
enabled: true,
- rule_id: body.rule_id.clone(),
- conditions: body.conditions.clone(),
+ rule_id: body.rule_id,
+ conditions: body.conditions,
}
.into(),
- ));
+ );
}
RuleKind::Sender => {
- if let Some(rule) = global
- .sender
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.sender.remove(&rule);
- }
-
- global.sender.insert(SenderPushRule(
+ global.sender.replace(
SimplePushRuleInit {
- actions: body.actions.clone(),
+ actions: body.actions,
default: false,
enabled: true,
- rule_id: body.rule_id.clone(),
+ rule_id: body.rule_id,
}
.into(),
- ));
+ );
}
RuleKind::Room => {
- if let Some(rule) = global
- .room
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.room.remove(&rule);
- }
-
- global.room.insert(RoomPushRule(
+ global.room.replace(
SimplePushRuleInit {
- actions: body.actions.clone(),
+ actions: body.actions,
default: false,
enabled: true,
- rule_id: body.rule_id.clone(),
+ rule_id: body.rule_id,
}
.into(),
- ));
+ );
}
RuleKind::Content => {
- if let Some(rule) = global
- .content
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.content.remove(&rule);
- }
-
- global.content.insert(ContentPushRule(
+ global.content.replace(
PatternedPushRuleInit {
- actions: body.actions.clone(),
+ actions: body.actions,
default: false,
enabled: true,
- rule_id: body.rule_id.clone(),
- pattern: body.pattern.clone().unwrap_or_default(),
+ rule_id: body.rule_id,
+ pattern: body.pattern.unwrap_or_default(),
}
.into(),
- ));
+ );
}
RuleKind::_Custom(_) => {}
}
@@ -280,29 +228,24 @@ pub async fn get_pushrule_actions_route(
let actions = match body.kind {
RuleKind::Override => global
.override_
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.actions.clone()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.actions.clone()),
RuleKind::Underride => global
.underride
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.actions.clone()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.actions.clone()),
RuleKind::Sender => global
.sender
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.actions.clone()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.actions.clone()),
RuleKind::Room => global
.room
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.actions.clone()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.actions.clone()),
RuleKind::Content => global
.content
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map(|rule| rule.0.actions.clone()),
+ .get(body.rule_id.as_str())
+ .map(|rule| rule.actions.clone()),
RuleKind::_Custom(_) => None,
};
@@ -343,63 +286,33 @@ pub async fn set_pushrule_actions_route(
let global = &mut event.content.global;
match body.kind {
RuleKind::Override => {
- if let Some(mut rule) = global
- .override_
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.override_.remove(&rule);
- rule.0.actions = body.actions.clone();
- global.override_.insert(rule);
+ if let Some(mut rule) = global.override_.get(body.rule_id.as_str()).cloned() {
+ rule.actions = body.actions.clone();
+ global.override_.replace(rule);
}
}
RuleKind::Underride => {
- if let Some(mut rule) = global
- .underride
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.underride.remove(&rule);
- rule.0.actions = body.actions.clone();
- global.underride.insert(rule);
+ if let Some(mut rule) = global.underride.get(body.rule_id.as_str()).cloned() {
+ rule.actions = body.actions.clone();
+ global.underride.replace(rule);
}
}
RuleKind::Sender => {
- if let Some(mut rule) = global
- .sender
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.sender.remove(&rule);
- rule.0.actions = body.actions.clone();
- global.sender.insert(rule);
+ if let Some(mut rule) = global.sender.get(body.rule_id.as_str()).cloned() {
+ rule.actions = body.actions.clone();
+ global.sender.replace(rule);
}
}
RuleKind::Room => {
- if let Some(mut rule) = global
- .room
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.room.remove(&rule);
- rule.0.actions = body.actions.clone();
- global.room.insert(rule);
+ if let Some(mut rule) = global.room.get(body.rule_id.as_str()).cloned() {
+ rule.actions = body.actions.clone();
+ global.room.replace(rule);
}
}
RuleKind::Content => {
- if let Some(mut rule) = global
- .content
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
- global.content.remove(&rule);
- rule.0.actions = body.actions.clone();
- global.content.insert(rule);
+ if let Some(mut rule) = global.content.get(body.rule_id.as_str()).cloned() {
+ rule.actions = body.actions.clone();
+ global.content.replace(rule);
}
}
RuleKind::_Custom(_) => {}
@@ -449,28 +362,28 @@ pub async fn get_pushrule_enabled_route(
RuleKind::Override => global
.override_
.iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map_or(false, |rule| rule.0.enabled),
+ .find(|rule| rule.rule_id == body.rule_id)
+ .map_or(false, |rule| rule.enabled),
RuleKind::Underride => global
.underride
.iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map_or(false, |rule| rule.0.enabled),
+ .find(|rule| rule.rule_id == body.rule_id)
+ .map_or(false, |rule| rule.enabled),
RuleKind::Sender => global
.sender
.iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map_or(false, |rule| rule.0.enabled),
+ .find(|rule| rule.rule_id == body.rule_id)
+ .map_or(false, |rule| rule.enabled),
RuleKind::Room => global
.room
.iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map_or(false, |rule| rule.0.enabled),
+ .find(|rule| rule.rule_id == body.rule_id)
+ .map_or(false, |rule| rule.enabled),
RuleKind::Content => global
.content
.iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .map_or(false, |rule| rule.0.enabled),
+ .find(|rule| rule.rule_id == body.rule_id)
+ .map_or(false, |rule| rule.enabled),
RuleKind::_Custom(_) => false,
};
@@ -508,62 +421,37 @@ pub async fn set_pushrule_enabled_route(
let global = &mut event.content.global;
match body.kind {
RuleKind::Override => {
- if let Some(mut rule) = global
- .override_
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(mut rule) = global.override_.get(body.rule_id.as_str()).cloned() {
global.override_.remove(&rule);
- rule.0.enabled = body.enabled;
+ rule.enabled = body.enabled;
global.override_.insert(rule);
}
}
RuleKind::Underride => {
- if let Some(mut rule) = global
- .underride
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(mut rule) = global.underride.get(body.rule_id.as_str()).cloned() {
global.underride.remove(&rule);
- rule.0.enabled = body.enabled;
+ rule.enabled = body.enabled;
global.underride.insert(rule);
}
}
RuleKind::Sender => {
- if let Some(mut rule) = global
- .sender
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(mut rule) = global.sender.get(body.rule_id.as_str()).cloned() {
global.sender.remove(&rule);
- rule.0.enabled = body.enabled;
+ rule.enabled = body.enabled;
global.sender.insert(rule);
}
}
RuleKind::Room => {
- if let Some(mut rule) = global
- .room
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(mut rule) = global.room.get(body.rule_id.as_str()).cloned() {
global.room.remove(&rule);
- rule.0.enabled = body.enabled;
+ rule.enabled = body.enabled;
global.room.insert(rule);
}
}
RuleKind::Content => {
- if let Some(mut rule) = global
- .content
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(mut rule) = global.content.get(body.rule_id.as_str()).cloned() {
global.content.remove(&rule);
- rule.0.enabled = body.enabled;
+ rule.enabled = body.enabled;
global.content.insert(rule);
}
}
@@ -612,52 +500,27 @@ pub async fn delete_pushrule_route(
let global = &mut event.content.global;
match body.kind {
RuleKind::Override => {
- if let Some(rule) = global
- .override_
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(rule) = global.override_.get(body.rule_id.as_str()).cloned() {
global.override_.remove(&rule);
}
}
RuleKind::Underride => {
- if let Some(rule) = global
- .underride
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(rule) = global.underride.get(body.rule_id.as_str()).cloned() {
global.underride.remove(&rule);
}
}
RuleKind::Sender => {
- if let Some(rule) = global
- .sender
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(rule) = global.sender.get(body.rule_id.as_str()).cloned() {
global.sender.remove(&rule);
}
}
RuleKind::Room => {
- if let Some(rule) = global
- .room
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(rule) = global.room.get(body.rule_id.as_str()).cloned() {
global.room.remove(&rule);
}
}
RuleKind::Content => {
- if let Some(rule) = global
- .content
- .iter()
- .find(|rule| rule.0.rule_id == body.rule_id)
- .cloned()
- {
+ if let Some(rule) = global.content.get(body.rule_id.as_str()).cloned() {
global.content.remove(&rule);
}
}
diff --git a/src/client_server/state.rs b/src/client_server/state.rs
index 54c5fa5..88cce03 100644
--- a/src/client_server/state.rs
+++ b/src/client_server/state.rs
@@ -3,10 +3,7 @@ use crate::{pdu::PduBuilder, ConduitResult, Database, Error, Result, Ruma};
use ruma::{
api::client::{
error::ErrorKind,
- r0::state::{
- get_state_events, get_state_events_for_empty_key, get_state_events_for_key,
- send_state_event_for_empty_key, send_state_event_for_key,
- },
+ r0::state::{get_state_events, get_state_events_for_key, send_state_event},
},
events::{
room::history_visibility::{HistoryVisibility, HistoryVisibilityEventContent},
@@ -25,8 +22,8 @@ use rocket::{get, put};
#[tracing::instrument(skip(db, body))]
pub async fn send_state_event_for_key_route(
db: State<'_, Database>,
- body: Ruma>,
-) -> ConduitResult {
+ body: Ruma>,
+) -> ConduitResult {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
let content = serde_json::from_str::(
@@ -49,7 +46,7 @@ pub async fn send_state_event_for_key_route(
db.flush().await?;
- Ok(send_state_event_for_key::Response { event_id }.into())
+ Ok(send_state_event::Response { event_id }.into())
}
#[cfg_attr(
@@ -59,8 +56,8 @@ pub async fn send_state_event_for_key_route(
#[tracing::instrument(skip(db, body))]
pub async fn send_state_event_for_empty_key_route(
db: State<'_, Database>,
- body: Ruma>,
-) -> ConduitResult {
+ body: Ruma>,
+) -> ConduitResult {
// This just calls send_state_event_for_key_route
let Ruma {
body,
@@ -81,7 +78,7 @@ pub async fn send_state_event_for_empty_key_route(
&db,
sender_user
.as_ref()
- .expect("no user for send state empty key rout"),
+ .expect("no user for send state empty key route"),
&body.content,
json,
&body.room_id,
@@ -91,7 +88,7 @@ pub async fn send_state_event_for_empty_key_route(
db.flush().await?;
- Ok(send_state_event_for_empty_key::Response { event_id }.into())
+ Ok(send_state_event::Response { event_id }.into())
}
#[cfg_attr(
@@ -199,8 +196,8 @@ pub async fn get_state_events_for_key_route(
#[tracing::instrument(skip(db, body))]
pub async fn get_state_events_for_empty_key_route(
db: State<'_, Database>,
- body: Ruma>,
-) -> ConduitResult {
+ body: Ruma>,
+) -> ConduitResult {
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
#[allow(clippy::blocks_in_if_conditions)]
@@ -236,7 +233,7 @@ pub async fn get_state_events_for_empty_key_route(
"State event not found.",
))?;
- Ok(get_state_events_for_empty_key::Response {
+ Ok(get_state_events_for_key::Response {
content: serde_json::value::to_raw_value(&event.content)
.map_err(|_| Error::bad_database("Invalid event content in database"))?,
}
diff --git a/src/database.rs b/src/database.rs
index d8734b5..bacf3b9 100644
--- a/src/database.rs
+++ b/src/database.rs
@@ -217,7 +217,7 @@ impl Database {
}
pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) {
- let userid_bytes = user_id.to_string().as_bytes().to_vec();
+ let userid_bytes = user_id.as_bytes().to_vec();
let mut userid_prefix = userid_bytes.clone();
userid_prefix.push(0xff);
@@ -241,7 +241,7 @@ impl Database {
// Events for rooms we are in
for room_id in self.rooms.rooms_joined(user_id).filter_map(|r| r.ok()) {
- let roomid_bytes = room_id.to_string().as_bytes().to_vec();
+ let roomid_bytes = room_id.as_bytes().to_vec();
let mut roomid_prefix = roomid_bytes.clone();
roomid_prefix.push(0xff);
diff --git a/src/database/account_data.rs b/src/database/account_data.rs
index 38e6c32..f3832ea 100644
--- a/src/database/account_data.rs
+++ b/src/database/account_data.rs
@@ -30,7 +30,7 @@ impl AccountData {
.as_bytes()
.to_vec();
prefix.push(0xff);
- prefix.extend_from_slice(&user_id.to_string().as_bytes());
+ prefix.extend_from_slice(&user_id.as_bytes());
prefix.push(0xff);
// Remove old entry
@@ -42,7 +42,7 @@ impl AccountData {
let mut key = prefix;
key.extend_from_slice(&globals.next_count()?.to_be_bytes());
key.push(0xff);
- key.extend_from_slice(event_type.to_string().as_bytes());
+ key.extend_from_slice(event_type.as_ref().as_bytes());
let json = serde_json::to_value(data).expect("all types here can be serialized"); // TODO: maybe add error handling
if json.get("type").is_none() || json.get("content").is_none() {
@@ -89,7 +89,7 @@ impl AccountData {
.as_bytes()
.to_vec();
prefix.push(0xff);
- prefix.extend_from_slice(&user_id.to_string().as_bytes());
+ prefix.extend_from_slice(&user_id.as_bytes());
prefix.push(0xff);
// Skip the data that's exactly at since, because we sent that last time
@@ -135,7 +135,7 @@ impl AccountData {
.as_bytes()
.to_vec();
prefix.push(0xff);
- prefix.extend_from_slice(&user_id.to_string().as_bytes());
+ prefix.extend_from_slice(&user_id.as_bytes());
prefix.push(0xff);
let kind = kind.clone();
@@ -148,7 +148,7 @@ impl AccountData {
k.rsplit(|&b| b == 0xff)
.next()
.map(|current_event_type| {
- current_event_type == kind.to_string().as_bytes()
+ current_event_type == kind.as_ref().as_bytes()
})
.unwrap_or(false)
})
diff --git a/src/database/key_backups.rs b/src/database/key_backups.rs
index 4c65354..0f9af2e 100644
--- a/src/database/key_backups.rs
+++ b/src/database/key_backups.rs
@@ -24,7 +24,7 @@ impl KeyBackups {
) -> Result {
let version = globals.next_count()?.to_string();
- let mut key = user_id.to_string().as_bytes().to_vec();
+ let mut key = user_id.as_bytes().to_vec();
key.push(0xff);
key.extend_from_slice(&version.as_bytes());
@@ -39,7 +39,7 @@ impl KeyBackups {
}
pub fn delete_backup(&self, user_id: &UserId, version: &str) -> Result<()> {
- let mut key = user_id.to_string().as_bytes().to_vec();
+ let mut key = user_id.as_bytes().to_vec();
key.push(0xff);
key.extend_from_slice(&version.as_bytes());
@@ -67,7 +67,7 @@ impl KeyBackups {
backup_metadata: &BackupAlgorithm,
globals: &super::globals::Globals,
) -> Result {
- let mut key = user_id.to_string().as_bytes().to_vec();
+ let mut key = user_id.as_bytes().to_vec();
key.push(0xff);
key.extend_from_slice(&version.as_bytes());
@@ -89,7 +89,7 @@ impl KeyBackups {
}
pub fn get_latest_backup(&self, user_id: &UserId) -> Result