use crate::Result;
use crate::AppServiceError;
use crate::config::AppServiceConfig;
use marine::TomlMarineConfig;
use marine_wasm_backend_traits::WasmBackend;
use serde_derive::Serialize;
use serde_derive::Deserialize;
use std::convert::TryInto;
use std::path::PathBuf;
#[derive(Deserialize, Serialize, Debug, Clone, Default)]
pub struct TomlAppServiceConfig {
pub service_working_dir: Option<String>,
#[serde(flatten)]
pub toml_marine_config: TomlMarineConfig,
}
impl TomlAppServiceConfig {
pub fn load<P: Into<PathBuf>>(path: P) -> Result<Self> {
let path = path.into();
let file_content = std::fs::read(&path)?;
toml::from_slice(&file_content).map_err(|e| {
AppServiceError::ConfigParseError(format!("Error parsing config {:?}: {:?}", path, e))
})
}
}
impl<WB: WasmBackend> TryInto<AppServiceConfig<WB>> for TomlAppServiceConfig {
type Error = AppServiceError;
fn try_into(self) -> Result<AppServiceConfig<WB>> {
let marine_config = self.toml_marine_config.try_into()?;
let service_working_dir = match self.service_working_dir {
Some(service_working_dir) => PathBuf::from(service_working_dir),
None => std::env::current_dir()?,
};
Ok(AppServiceConfig {
service_working_dir,
marine_config,
})
}
}