aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-04-03 03:13:00 +0000
committerFuwn <[email protected]>2023-04-03 03:13:00 +0000
commit86ef3091353846d2aa9fa2d6c3da35ddf0dd3d39 (patch)
tree3f76d86bd819066fd3e7bdde9fa56ef671d29b6e /src
parentrefactor(handler): misc. rename (diff)
downloadwindmark-86ef3091353846d2aa9fa2d6c3da35ddf0dd3d39.tar.xz
windmark-86ef3091353846d2aa9fa2d6c3da35ddf0dd3d39.zip
refactor(handler): move traits
Diffstat (limited to 'src')
-rw-r--r--src/context/error.rs41
-rw-r--r--src/context/hook.rs45
-rw-r--r--src/context/route.rs45
-rw-r--r--src/handler/hooks.rs23
-rw-r--r--src/handler/hooks/post_route.rs28
-rw-r--r--src/handler/hooks/pre_route.rs24
-rw-r--r--src/handler/partial.rs23
-rw-r--r--src/handler/response.rs25
-rw-r--r--src/handler/response/error.rs28
-rw-r--r--src/handler/response/route.rs28
10 files changed, 310 insertions, 0 deletions
diff --git a/src/context/error.rs b/src/context/error.rs
new file mode 100644
index 0000000..3b3fd5e
--- /dev/null
+++ b/src/context/error.rs
@@ -0,0 +1,41 @@
+// 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 openssl::x509::X509;
+use tokio::net::TcpStream;
+use url::Url;
+
+pub struct ErrorContext<'a> {
+ pub tcp: &'a TcpStream,
+ pub url: &'a Url,
+ pub certificate: &'a Option<X509>,
+}
+
+impl<'a> ErrorContext<'a> {
+ pub const fn new(
+ tcp: &'a TcpStream,
+ url: &'a Url,
+ certificate: &'a Option<X509>,
+ ) -> Self {
+ Self {
+ tcp,
+ url,
+ certificate,
+ }
+ }
+}
diff --git a/src/context/hook.rs b/src/context/hook.rs
new file mode 100644
index 0000000..00cd9d8
--- /dev/null
+++ b/src/context/hook.rs
@@ -0,0 +1,45 @@
+// 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 matchit::Params;
+use openssl::x509::X509;
+use tokio::net::TcpStream;
+use url::Url;
+
+pub struct HookContext<'a> {
+ pub tcp: &'a TcpStream,
+ pub url: &'a Url,
+ pub params: Option<&'a Params<'a, 'a>>,
+ pub certificate: &'a Option<X509>,
+}
+
+impl<'a> HookContext<'a> {
+ pub const fn new(
+ tcp: &'a TcpStream,
+ url: &'a Url,
+ params: Option<&'a Params<'a, 'a>>,
+ certificate: &'a Option<X509>,
+ ) -> Self {
+ Self {
+ tcp,
+ url,
+ params,
+ certificate,
+ }
+ }
+}
diff --git a/src/context/route.rs b/src/context/route.rs
new file mode 100644
index 0000000..beaf45f
--- /dev/null
+++ b/src/context/route.rs
@@ -0,0 +1,45 @@
+// 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 matchit::Params;
+use openssl::x509::X509;
+use tokio::net::TcpStream;
+use url::Url;
+
+pub struct RouteContext<'a> {
+ pub tcp: &'a TcpStream,
+ pub url: &'a Url,
+ pub params: &'a Params<'a, 'a>,
+ pub certificate: &'a Option<X509>,
+}
+
+impl<'a> RouteContext<'a> {
+ pub const fn new(
+ tcp: &'a TcpStream,
+ url: &'a Url,
+ params: &'a Params<'a, 'a>,
+ certificate: &'a Option<X509>,
+ ) -> Self {
+ Self {
+ tcp,
+ url,
+ params,
+ certificate,
+ }
+ }
+}
diff --git a/src/handler/hooks.rs b/src/handler/hooks.rs
new file mode 100644
index 0000000..591a598
--- /dev/null
+++ b/src/handler/hooks.rs
@@ -0,0 +1,23 @@
+// 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
+
+mod post_route;
+mod pre_route;
+
+pub use post_route::PostRouteHook;
+pub use pre_route::PreRouteHook;
diff --git a/src/handler/hooks/post_route.rs b/src/handler/hooks/post_route.rs
new file mode 100644
index 0000000..eea0128
--- /dev/null
+++ b/src/handler/hooks/post_route.rs
@@ -0,0 +1,28 @@
+// 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::{context::HookContext, Response};
+
+#[allow(clippy::module_name_repetitions)]
+pub trait PostRouteHook:
+ FnMut(HookContext<'_>, &mut Response) + Send + Sync
+{
+}
+
+impl<T> PostRouteHook for T where T: FnMut(HookContext<'_>, &mut Response) + Send + Sync
+{}
diff --git a/src/handler/hooks/pre_route.rs b/src/handler/hooks/pre_route.rs
new file mode 100644
index 0000000..13f4482
--- /dev/null
+++ b/src/handler/hooks/pre_route.rs
@@ -0,0 +1,24 @@
+// 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::context::HookContext;
+
+#[allow(clippy::module_name_repetitions)]
+pub trait PreRouteHook: FnMut(HookContext<'_>) + Send + Sync {}
+
+impl<T> PreRouteHook for T where T: FnMut(HookContext<'_>) + Send + Sync {}
diff --git a/src/handler/partial.rs b/src/handler/partial.rs
new file mode 100644
index 0000000..3d5bfb2
--- /dev/null
+++ b/src/handler/partial.rs
@@ -0,0 +1,23 @@
+// 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::context::RouteContext;
+
+pub trait Partial: FnMut(RouteContext<'_>) -> String + Send + Sync {}
+
+impl<T> Partial for T where T: FnMut(RouteContext<'_>) -> String + Send + Sync {}
diff --git a/src/handler/response.rs b/src/handler/response.rs
new file mode 100644
index 0000000..737fb5e
--- /dev/null
+++ b/src/handler/response.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
+
+#![allow(clippy::module_name_repetitions)]
+
+mod error;
+mod route;
+
+pub use error::ErrorResponse;
+pub use route::RouteResponse;
diff --git a/src/handler/response/error.rs b/src/handler/response/error.rs
new file mode 100644
index 0000000..da57898
--- /dev/null
+++ b/src/handler/response/error.rs
@@ -0,0 +1,28 @@
+// 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::{context::ErrorContext, Response};
+
+#[allow(clippy::module_name_repetitions)]
+pub trait ErrorResponse:
+ FnMut(ErrorContext<'_>) -> Response + Send + Sync
+{
+}
+
+impl<T> ErrorResponse for T where T: FnMut(ErrorContext<'_>) -> Response + Send + Sync
+{}
diff --git a/src/handler/response/route.rs b/src/handler/response/route.rs
new file mode 100644
index 0000000..f480b02
--- /dev/null
+++ b/src/handler/response/route.rs
@@ -0,0 +1,28 @@
+// 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::{context::RouteContext, Response};
+
+#[allow(clippy::module_name_repetitions)]
+pub trait RouteResponse:
+ FnMut(RouteContext<'_>) -> Response + Send + Sync
+{
+}
+
+impl<T> RouteResponse for T where T: FnMut(RouteContext<'_>) -> Response + Send + Sync
+{}