diff options
| author | Fuwn <[email protected]> | 2022-03-27 04:25:17 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2022-03-27 04:25:17 +0000 |
| commit | 83db22bd1a37bf74569102c0e2f3564c650f1b21 (patch) | |
| tree | e7f2f625fb2a72021ce5baaa7a90df3bbebd4e0a /src | |
| parent | feat(response): add remaining responses (redirect) (diff) | |
| download | windmark-83db22bd1a37bf74569102c0e2f3564c650f1b21.tar.xz windmark-83db22bd1a37bf74569102c0e2f3564c650f1b21.zip | |
refactor(handler): move handlers
Diffstat (limited to 'src')
| -rw-r--r-- | src/handler.rs | 25 | ||||
| -rw-r--r-- | src/lib.rs | 46 |
2 files changed, 39 insertions, 32 deletions
diff --git a/src/handler.rs b/src/handler.rs new file mode 100644 index 0000000..e945dfc --- /dev/null +++ b/src/handler.rs @@ -0,0 +1,25 @@ +// This file is part of Windmark <https://github.com/gemrest/windmark>. +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// SPDX-License-Identifier: GPL-3.0-only + +use crate::{returnable::RouteContext, Response}; + +pub type RouteResponse = fn(RouteContext<'_>) -> Response; +pub type ErrorResponse = fn(crate::returnable::ErrorContext<'_>) -> Response; +pub type Callback = + fn(&tokio::net::TcpStream, &url::Url, Option<&matchit::Params<'_, '_>>); +pub type Partial = fn(RouteContext<'_>) -> String; @@ -28,6 +28,7 @@ #![deny(clippy::all, clippy::nursery, clippy::pedantic)] #![recursion_limit = "128"] +mod handler; pub mod response; pub(crate) mod returnable; pub mod utilities; @@ -37,39 +38,33 @@ extern crate log; use std::{error::Error, sync::Arc}; -use matchit::Params; use openssl::ssl::{self, SslAcceptor, SslMethod}; pub use response::Response; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, - net::TcpStream, stream::StreamExt, }; use url::Url; use crate::{ + handler::{Callback, ErrorResponse, Partial, RouteResponse}, response::to_value_set_status, returnable::{ErrorContext, RouteContext}, }; -type RouteResponseHandler = fn(RouteContext<'_>) -> Response; -type ErrorResponseHandler = fn(ErrorContext<'_>) -> Response; -type CallbackHandler = fn(&TcpStream, &Url, Option<&Params<'_, '_>>); -type PartialHandler = fn(RouteContext<'_>) -> String; - #[derive(Clone)] pub struct Router { - routes: matchit::Router<RouteResponseHandler>, - error_handler: ErrorResponseHandler, + routes: matchit::Router<RouteResponse>, + error_handler: ErrorResponse, private_key_file_name: String, certificate_chain_file_name: String, - header: PartialHandler, - footer: PartialHandler, + header: Partial, + footer: Partial, ssl_acceptor: Arc<SslAcceptor>, #[cfg(feature = "logger")] default_logger: bool, - pre_route_callback: CallbackHandler, - post_route_callback: CallbackHandler, + pre_route_callback: Callback, + post_route_callback: Callback, } impl Router { /// Create a new `Router` @@ -135,11 +130,7 @@ impl Router { /// # Panics /// /// if the route cannot be mounted. - pub fn mount( - &mut self, - route: &str, - handler: RouteResponseHandler, - ) -> &mut Self { + pub fn mount(&mut self, route: &str, handler: RouteResponse) -> &mut Self { self.routes.insert(route, handler).unwrap(); self @@ -154,10 +145,7 @@ impl Router { /// windmark::Response::Success("You have encountered an error!".into()) /// }); /// ``` - pub fn set_error_handler( - &mut self, - handler: ErrorResponseHandler, - ) -> &mut Self { + pub fn set_error_handler(&mut self, handler: ErrorResponse) -> &mut Self { self.error_handler = handler; self @@ -172,7 +160,7 @@ impl Router { /// format!("This is displayed at the top of {}!", context.url.path()) /// }); /// ``` - pub fn set_header(&mut self, handler: PartialHandler) -> &mut Self { + pub fn set_header(&mut self, handler: Partial) -> &mut Self { self.header = handler; self @@ -187,7 +175,7 @@ impl Router { /// format!("This is displayed at the bottom of {}!", context.url.path()) /// }); /// ``` - pub fn set_footer(&mut self, handler: PartialHandler) -> &mut Self { + pub fn set_footer(&mut self, handler: Partial) -> &mut Self { self.footer = handler; self @@ -420,10 +408,7 @@ impl Router { /// ) /// }); /// ``` - pub fn set_pre_route_callback( - &mut self, - callback: CallbackHandler, - ) -> &mut Self { + pub fn set_pre_route_callback(&mut self, callback: Callback) -> &mut Self { self.pre_route_callback = callback; self @@ -443,10 +428,7 @@ impl Router { /// ) /// }); /// ``` - pub fn set_post_route_callback( - &mut self, - callback: CallbackHandler, - ) -> &mut Self { + pub fn set_post_route_callback(&mut self, callback: Callback) -> &mut Self { self.post_route_callback = callback; self |