forked from kemitix/git-next
refactor: config: use thiserror and move tests about
This commit is contained in:
parent
235aee8b11
commit
0b8e41a8ec
7 changed files with 41 additions and 36 deletions
|
@ -82,6 +82,7 @@ derive_more = { version = "1.0.0-beta.6", features = [
|
||||||
"from",
|
"from",
|
||||||
] }
|
] }
|
||||||
derive-with = "0.5"
|
derive-with = "0.5"
|
||||||
|
thiserror = "1.0"
|
||||||
|
|
||||||
# file watcher
|
# file watcher
|
||||||
inotify = "0.10"
|
inotify = "0.10"
|
||||||
|
|
|
@ -44,6 +44,7 @@ ulid = { workspace = true }
|
||||||
# boilerplate
|
# boilerplate
|
||||||
derive_more = { workspace = true }
|
derive_more = { workspace = true }
|
||||||
derive-with = { workspace = true }
|
derive-with = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
#
|
#
|
||||||
# # file watcher
|
# # file watcher
|
||||||
# inotify = { workspace = true }
|
# inotify = { workspace = true }
|
||||||
|
|
|
@ -13,14 +13,17 @@ use tracing::info;
|
||||||
|
|
||||||
use crate::{ForgeAlias, ForgeConfig, RepoAlias};
|
use crate::{ForgeAlias, ForgeConfig, RepoAlias};
|
||||||
|
|
||||||
#[derive(Debug, derive_more::From, derive_more::Display)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
Io(std::io::Error),
|
#[error("fs: {0}")]
|
||||||
KxIoFs(kxio::fs::Error),
|
KxioFs(#[from] kxio::fs::Error),
|
||||||
TomlDe(toml::de::Error),
|
|
||||||
AddressParse(std::net::AddrParseError),
|
#[error("deserialise toml: {0}")]
|
||||||
|
TomlDe(#[from] toml::de::Error),
|
||||||
|
|
||||||
|
#[error("parse IP addres/port: {0}")]
|
||||||
|
AddressParse(#[from] std::net::AddrParseError),
|
||||||
}
|
}
|
||||||
impl std::error::Error for Error {}
|
|
||||||
|
|
||||||
type Result<T> = core::result::Result<T, Error>;
|
type Result<T> = core::result::Result<T, Error>;
|
||||||
|
|
||||||
|
@ -39,7 +42,7 @@ impl ServerConfig {
|
||||||
let file = fs.base().join("git-next-server.toml");
|
let file = fs.base().join("git-next-server.toml");
|
||||||
info!(?file, "");
|
info!(?file, "");
|
||||||
let str = fs.file_read_to_string(&file)?;
|
let str = fs.file_read_to_string(&file)?;
|
||||||
toml::from_str(&str).map_err(Into::into)
|
Ok(toml::from_str(&str)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn forges(&self) -> impl Iterator<Item = (ForgeAlias, &ForgeConfig)> {
|
pub fn forges(&self) -> impl Iterator<Item = (ForgeAlias, &ForgeConfig)> {
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
use std::str::FromStr as _;
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, derive_more::Deref, derive_more::Display)]
|
#[derive(Clone, Debug, PartialEq, Eq, derive_more::Deref, derive_more::Display)]
|
||||||
pub struct WebhookAuth(ulid::Ulid);
|
pub struct WebhookAuth(ulid::Ulid);
|
||||||
impl WebhookAuth {
|
impl WebhookAuth {
|
||||||
pub fn new(authorisation: &str) -> Result<Self, ulid::DecodeError> {
|
pub fn new(authorisation: &str) -> Result<Self, ulid::DecodeError> {
|
||||||
|
use std::str::FromStr as _;
|
||||||
let id = ulid::Ulid::from_str(authorisation)?;
|
let id = ulid::Ulid::from_str(authorisation)?;
|
||||||
tracing::info!("Parse auth token: {}", id);
|
tracing::info!("Parse auth token: {}", id);
|
||||||
Ok(Self(id))
|
Ok(Self(id))
|
||||||
|
@ -21,30 +20,3 @@ impl WebhookAuth {
|
||||||
self.0.to_bytes()
|
self.0.to_bytes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use crate::WebhookAuth;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn bytes() -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
let ulid = ulid::Ulid::new();
|
|
||||||
|
|
||||||
let wa = WebhookAuth::new(ulid.to_string().as_str())?;
|
|
||||||
|
|
||||||
assert_eq!(ulid.to_bytes(), wa.to_bytes());
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn string() -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
let ulid = ulid::Ulid::new();
|
|
||||||
|
|
||||||
let wa = WebhookAuth::new(ulid.to_string().as_str())?;
|
|
||||||
|
|
||||||
assert_eq!(ulid.to_string(), wa.to_string());
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,4 +3,7 @@ pub mod id;
|
||||||
pub mod message;
|
pub mod message;
|
||||||
pub mod push;
|
pub mod push;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests;
|
||||||
|
|
||||||
pub use push::Push;
|
pub use push::Push;
|
||||||
|
|
25
crates/config/src/webhook/tests.rs
Normal file
25
crates/config/src/webhook/tests.rs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
mod auth {
|
||||||
|
use crate::WebhookAuth;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn bytes() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let ulid = ulid::Ulid::new();
|
||||||
|
|
||||||
|
let wa = WebhookAuth::new(ulid.to_string().as_str())?;
|
||||||
|
|
||||||
|
assert_eq!(ulid.to_bytes(), wa.to_bytes());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn string() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let ulid = ulid::Ulid::new();
|
||||||
|
|
||||||
|
let wa = WebhookAuth::new(ulid.to_string().as_str())?;
|
||||||
|
|
||||||
|
assert_eq!(ulid.to_string(), wa.to_string());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue