forked from kemitix/git-next
feat(server/config): Parse file
This commit is contained in:
parent
90f9ab8e96
commit
efb55e4b3b
2 changed files with 68 additions and 1 deletions
64
src/server/config.rs
Normal file
64
src/server/config.rs
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
use serde::Deserialize;
|
||||||
|
use terrors::OneOf;
|
||||||
|
|
||||||
|
use crate::filesystem::FileSystem;
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Deserialize)]
|
||||||
|
pub(crate) struct Config {
|
||||||
|
r#type: ForgeType,
|
||||||
|
url: String,
|
||||||
|
user: String,
|
||||||
|
// API Token
|
||||||
|
// Private SSH Key Path
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Deserialize)]
|
||||||
|
pub(crate) enum ForgeType {
|
||||||
|
ForgeJo,
|
||||||
|
// Gitea,
|
||||||
|
// GitHub,
|
||||||
|
// GitLab,
|
||||||
|
// BitBucket,
|
||||||
|
}
|
||||||
|
impl Config {
|
||||||
|
pub(crate) fn load(fs: &FileSystem) -> Result<Self, OneOf<(std::io::Error, toml::de::Error)>> {
|
||||||
|
let str = fs.read_file("git-next-server.toml").map_err(OneOf::new)?;
|
||||||
|
toml::from_str(&str).map_err(OneOf::new)
|
||||||
|
}
|
||||||
|
pub const fn r#type(&self) -> &ForgeType {
|
||||||
|
&self.r#type
|
||||||
|
}
|
||||||
|
pub fn url(&self) -> &str {
|
||||||
|
self.url.as_str()
|
||||||
|
}
|
||||||
|
pub fn user(&self) -> &str {
|
||||||
|
self.user.as_str()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::filesystem::FileSystem;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_load() -> Result<(), OneOf<(std::io::Error, toml::de::Error)>> {
|
||||||
|
let fs = FileSystem::new_temp().map_err(OneOf::new)?;
|
||||||
|
fs.write_file(
|
||||||
|
"git-next-server.toml",
|
||||||
|
r#"
|
||||||
|
type = "ForgeJo"
|
||||||
|
url = "https://forge.jo"
|
||||||
|
user = "Bob"
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.map_err(OneOf::new)?;
|
||||||
|
let config = Config::load(&fs)?;
|
||||||
|
assert_eq!(config.r#type(), &ForgeType::ForgeJo);
|
||||||
|
assert_eq!(config.url(), "https://forge.jo".to_string());
|
||||||
|
assert_eq!(config.user(), "Bob".to_string());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
mod config;
|
||||||
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
@ -22,12 +24,13 @@ pub(crate) fn init(fs: FileSystem) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn start(_fs: FileSystem) {
|
pub(crate) fn start(fs: FileSystem) {
|
||||||
let Ok(_) = init_logging() else {
|
let Ok(_) = init_logging() else {
|
||||||
eprintln!("Failed to initialize logging.");
|
eprintln!("Failed to initialize logging.");
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
info!("Starting Server...");
|
info!("Starting Server...");
|
||||||
|
let _config = config::Config::load(&fs);
|
||||||
// todo!()
|
// todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue