1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-08-09 04:22:45 +03:00

Use BoxedFilter on main handlers to reduce compile times

This avoids having opaque `impl Filter`, which moves the compile time in
the `core` crate instead of the end `cli` one
This commit is contained in:
Quentin Gliech
2021-11-22 19:03:59 +01:00
parent 8608e46eba
commit 8a6751398d
4 changed files with 11 additions and 10 deletions

View File

@@ -16,17 +16,16 @@ use hyper::header::CONTENT_TYPE;
use mime::TEXT_PLAIN; use mime::TEXT_PLAIN;
use sqlx::{pool::PoolConnection, PgPool, Postgres}; use sqlx::{pool::PoolConnection, PgPool, Postgres};
use tracing::{info_span, Instrument}; use tracing::{info_span, Instrument};
use warp::{reply::with_header, Filter, Rejection, Reply}; use warp::{filters::BoxedFilter, reply::with_header, Filter, Rejection, Reply};
use crate::{errors::WrapError, filters::database::connection}; use crate::{errors::WrapError, filters::database::connection};
pub fn filter( pub fn filter(pool: &PgPool) -> BoxedFilter<(impl Reply,)> {
pool: &PgPool,
) -> impl Filter<Extract = (impl Reply,), Error = Rejection> + Clone + Send + Sync + 'static {
warp::path!("health") warp::path!("health")
.and(warp::get()) .and(warp::get())
.and(connection(pool)) .and(connection(pool))
.and_then(get) .and_then(get)
.boxed()
} }
async fn get(mut conn: PoolConnection<Postgres>) -> Result<impl Reply, Rejection> { async fn get(mut conn: PoolConnection<Postgres>) -> Result<impl Reply, Rejection> {

View File

@@ -16,7 +16,7 @@
use mas_templates::Templates; use mas_templates::Templates;
use sqlx::PgPool; use sqlx::PgPool;
use warp::{Filter, Rejection, Reply}; use warp::{filters::BoxedFilter, Filter, Reply};
use crate::config::RootConfig; use crate::config::RootConfig;
@@ -31,7 +31,7 @@ pub fn root(
pool: &PgPool, pool: &PgPool,
templates: &Templates, templates: &Templates,
config: &RootConfig, config: &RootConfig,
) -> impl Filter<Extract = (impl Reply,), Error = Rejection> + Clone + Send + Sync + 'static { ) -> BoxedFilter<(impl Reply,)> {
health(pool) health(pool)
.or(oauth2(pool, templates, &config.oauth2, &config.cookies)) .or(oauth2(pool, templates, &config.oauth2, &config.cookies))
.or(views( .or(views(
@@ -42,4 +42,5 @@ pub fn root(
&config.cookies, &config.cookies,
)) ))
.with(warp::log(module_path!())) .with(warp::log(module_path!()))
.boxed()
} }

View File

@@ -14,7 +14,7 @@
use mas_templates::Templates; use mas_templates::Templates;
use sqlx::PgPool; use sqlx::PgPool;
use warp::{Filter, Rejection, Reply}; use warp::{filters::BoxedFilter, Filter, Reply};
use crate::config::{CookiesConfig, OAuth2Config}; use crate::config::{CookiesConfig, OAuth2Config};
@@ -37,7 +37,7 @@ pub fn filter(
templates: &Templates, templates: &Templates,
oauth2_config: &OAuth2Config, oauth2_config: &OAuth2Config,
cookies_config: &CookiesConfig, cookies_config: &CookiesConfig,
) -> impl Filter<Extract = (impl Reply,), Error = Rejection> + Clone + Send + Sync + 'static { ) -> BoxedFilter<(impl Reply,)> {
discovery(oauth2_config) discovery(oauth2_config)
.or(keys(oauth2_config)) .or(keys(oauth2_config))
.or(authorization( .or(authorization(
@@ -49,4 +49,5 @@ pub fn filter(
.or(userinfo(pool, oauth2_config)) .or(userinfo(pool, oauth2_config))
.or(introspection(pool, oauth2_config)) .or(introspection(pool, oauth2_config))
.or(token(pool, oauth2_config)) .or(token(pool, oauth2_config))
.boxed()
} }

View File

@@ -14,7 +14,7 @@
use mas_templates::Templates; use mas_templates::Templates;
use sqlx::PgPool; use sqlx::PgPool;
use warp::{Filter, Rejection, Reply}; use warp::{filters::BoxedFilter, Filter, Reply};
use crate::config::{CookiesConfig, CsrfConfig, OAuth2Config}; use crate::config::{CookiesConfig, CsrfConfig, OAuth2Config};
@@ -37,7 +37,7 @@ pub(super) fn filter(
oauth2_config: &OAuth2Config, oauth2_config: &OAuth2Config,
csrf_config: &CsrfConfig, csrf_config: &CsrfConfig,
cookies_config: &CookiesConfig, cookies_config: &CookiesConfig,
) -> impl Filter<Extract = (impl Reply,), Error = Rejection> + Clone + Send + Sync + 'static { ) -> BoxedFilter<(impl Reply,)> {
index(pool, templates, oauth2_config, csrf_config, cookies_config) index(pool, templates, oauth2_config, csrf_config, cookies_config)
.or(login(pool, templates, csrf_config, cookies_config)) .or(login(pool, templates, csrf_config, cookies_config))
.or(register(pool, templates, csrf_config, cookies_config)) .or(register(pool, templates, csrf_config, cookies_config))