feat(server/config): Parse file

This commit is contained in:
Paul Campbell 2024-04-07 13:47:39 +01:00
parent 90f9ab8e96
commit efb55e4b3b
2 changed files with 68 additions and 1 deletions

64
src/server/config.rs Normal file
View 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(())
}
}

View file

@ -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!()
} }