use std::path::PathBuf;
use color_eyre::eyre::{Context, Result};
use v_utils::{io::ExpandedPath, macros::MyConfigPrimitives};
#[derive(Clone, Debug, MyConfigPrimitives)]
pub struct AppConfig {
pub positions_dir: PathBuf,
pub binance: Binance,
}
#[derive(Clone, Debug, MyConfigPrimitives)]
pub struct Binance {
pub full_key: String,
pub full_secret: String,
pub read_key: String,
pub read_secret: String,
}
impl AppConfig {
pub fn new(path: ExpandedPath) -> Result<Self> {
let builder = config::Config::builder()
.set_default("comparison_offset_h", 24)?
.add_source(config::File::with_name(&path.to_string()));
let settings: config::Config = builder.build()?;
let settings: Self = settings.try_deserialize()?;
std::fs::create_dir_all(&settings.positions_dir).wrap_err_with(|| format!("Failed to create positions directory at {:?}", settings.positions_dir))?;
Ok(settings)
}
}