diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..eeba121 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,60 @@ +// Copyright (C) 2023-2099 The crate authors. +// +// 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. +// +// 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 Affero General Public License +// for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +use std::error::Error as StdError; +use std::str::Utf8Error; + +#[derive(Debug)] +pub(crate) enum Error { + MethodMismatch, + InvalidToken, + InvalidContentType, + Hyper(hyper::Error), + SerdeJson(serde_json::Error), + Utf8(Utf8Error), +} + +impl StdError for Error {} + +impl std::fmt::Display for Error { + fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Error::MethodMismatch => write!(fmt, "the method is invalid"), + Error::InvalidToken => write!(fmt, "the token is invalid"), + Error::InvalidContentType => write!(fmt, "the content-type is invalid"), + Error::Hyper(e) => write!(fmt, "hyper error: {}", e), + Error::SerdeJson(e) => write!(fmt, "serde_json error: {}", e), + Error::Utf8(e) => write!(fmt, "Utf8 error: {}", e), + } + } +} + +impl From for Error { + fn from(err: hyper::Error) -> Error { + Error::Hyper(err) + } +} + +impl From for Error { + fn from(err: serde_json::Error) -> Error { + Error::SerdeJson(err) + } +} + +impl From for Error { + fn from(err: Utf8Error) -> Error { + Error::Utf8(err) + } +} diff --git a/src/main.rs b/src/main.rs index b82a846..5d29529 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,10 +15,13 @@ #![feature(let_chains)] +mod error; + +use crate::error::Error; + use std::convert::Infallible; -use std::error::Error as StdError; use std::net::SocketAddr; -use std::str::{from_utf8, Utf8Error}; +use std::str::from_utf8; use gitlab::webhooks::WebHook; use hyper::{ @@ -27,49 +30,6 @@ use hyper::{ }; use log::{debug, error}; -#[derive(Debug)] -enum Error { - MethodMismatch, - InvalidToken, - InvalidContentType, - Hyper(hyper::Error), - SerdeJson(serde_json::Error), - Utf8(Utf8Error), -} - -impl StdError for Error {} - -impl std::fmt::Display for Error { - fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result { - match self { - Error::MethodMismatch => write!(fmt, "the method is invalid"), - Error::InvalidToken => write!(fmt, "the token is invalid"), - Error::InvalidContentType => write!(fmt, "the content-type is invalid"), - Error::Hyper(e) => write!(fmt, "hyper error: {}", e), - Error::SerdeJson(e) => write!(fmt, "serde_json error: {}", e), - Error::Utf8(e) => write!(fmt, "Utf8 error: {}", e), - } - } -} - -impl From for Error { - fn from(err: hyper::Error) -> Error { - Error::Hyper(err) - } -} - -impl From for Error { - fn from(err: serde_json::Error) -> Error { - Error::SerdeJson(err) - } -} - -impl From for Error { - fn from(err: Utf8Error) -> Error { - Error::Utf8(err) - } -} - fn error_res(e: E) -> Result, Infallible> { error!("error response: {:?}", e);