Skip to content

Commit

Permalink
Merge branches 'quenting/rust-1.66.0', 'quenting/rust-twisted-http' a…
Browse files Browse the repository at this point in the history
…nd 'quenting/msc4108-delegation' into quenting/merge
  • Loading branch information
sandhose committed Apr 15, 2024
3 parents eedfd24 + e6d59a9 + d613c4c commit 272fa7e
Show file tree
Hide file tree
Showing 12 changed files with 402 additions and 10 deletions.
92 changes: 90 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions changelog.d/17081.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add helpers to transform Twisted requests to Rust http Requests/Responses.
1 change: 1 addition & 0 deletions changelog.d/17086.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Support delegating the rendezvous mechanism described MSC4108 to an external implementation.
3 changes: 3 additions & 0 deletions rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ name = "synapse.synapse_rust"

[dependencies]
anyhow = "1.0.63"
bytes = "1.6.0"
headers = "0.4.0"
http = "1.1.0"
lazy_static = "1.4.0"
log = "0.4.17"
pyo3 = { version = "0.20.0", features = [
Expand Down
59 changes: 59 additions & 0 deletions rust/src/errors.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* This file is licensed under the Affero General Public License (AGPL) version 3.
*
* Copyright (C) 2024 New Vector, Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* See the GNU Affero General Public License for more details:
* <https://www.gnu.org/licenses/agpl-3.0.html>.
*/

#![allow(clippy::new_ret_no_self)]

use std::collections::HashMap;

use http::{HeaderMap, StatusCode};
use pyo3::import_exception;

import_exception!(synapse.api.errors, SynapseError);

impl SynapseError {
pub fn new(
code: StatusCode,
message: String,
errcode: &'static str,
additional_fields: Option<HashMap<String, String>>,
headers: Option<HeaderMap>,
) -> pyo3::PyErr {
// Transform the HeaderMap into a HashMap<String, String>
let headers = headers.map(|headers| {
headers
.iter()
.map(|(key, value)| {
(
key.as_str().to_owned(),
value
.to_str()
// XXX: will that ever panic?
.expect("header value is valid ASCII")
.to_owned(),
)
})
.collect::<HashMap<String, String>>()
});

SynapseError::new_err((code.as_u16(), message, errcode, additional_fields, headers))
}
}

import_exception!(synapse.api.errors, NotFoundError);

impl NotFoundError {
pub fn new() -> pyo3::PyErr {
NotFoundError::new_err(())
}
}
Loading

0 comments on commit 272fa7e

Please sign in to comment.