summary refs log tree commit diff
path: root/rust/src/lib.rs
diff options
context:
space:
mode:
authorQuentin Gliech <quenting@element.io>2024-04-18 12:20:30 +0200
committerGitHub <noreply@github.com>2024-04-18 12:20:30 +0200
commit09f0957b36cf1b4e9a89f5594df51a853d0dfffe (patch)
tree57ad6eb65d833ed18183a19bbf442d341e6ce37d /rust/src/lib.rs
parentFix remote receipts for events we don't have (#17096) (diff)
downloadsynapse-09f0957b36cf1b4e9a89f5594df51a853d0dfffe.tar.xz
Helpers to transform Twisted requests to Rust http Requests/Responses (#17081)
This adds functions to transform a Twisted request to the
`http::Request`, and then to send back an `http::Response` through it.

It also imports the SynapseError exception so that we can throw that
from Rust code directly

Example usage of this would be:

```rust
use crate::http::{http_request_from_twisted, http_response_to_twisted, HeaderMapPyExt};

fn handler(twisted_request: &PyAny) -> PyResult<()> {
    let request = http_request_from_twisted(twisted_request)?;

    let ua: headers::UserAgent = request.headers().typed_get_required()?;

    if whatever {
        return Err((crate::errors::SynapseError::new(
            StatusCode::UNAUTHORIZED,
            "Whatever".to_owned
            "M_UNAUTHORIZED",
            None,
            None,
        )));
    }

    let response = Response::new("hello".as_bytes());
    http_response_to_twisted(twisted_request, response)?;

    Ok(())
}
```
Diffstat (limited to '')
-rw-r--r--rust/src/lib.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index 7b3b579e55..36a3d64528 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -3,7 +3,9 @@ use pyo3::prelude::*;
 use pyo3_log::ResetHandle;
 
 pub mod acl;
+pub mod errors;
 pub mod events;
+pub mod http;
 pub mod push;
 
 lazy_static! {