1use std::env;
2use std::fs;
3use std::path::{Path, PathBuf};
4
5use serde::Deserialize;
6
7pub use crate::error::ConfigError;
8
9#[derive(Debug, Default, Deserialize)]
11pub struct AnytypeHeadlessConfig {
12 #[serde(default, rename = "accountKey")]
13 pub account_key: Option<String>,
14
15 #[serde(default, rename = "sessionToken")]
16 pub session_token: Option<String>,
17
18 #[serde(default, rename = "accountId")]
19 pub account_id: Option<String>,
20}
21
22pub fn default_headless_config_path() -> Result<PathBuf, ConfigError> {
23 let home = env::var("HOME").map_err(|_| ConfigError::MissingHome)?;
24 Ok(PathBuf::from(home).join(".anytype").join("config.json"))
25}
26
27pub fn load_headless_config(
30 path: Option<&Path>,
31) -> Result<Option<AnytypeHeadlessConfig>, ConfigError> {
32 let path = match path {
33 Some(path) => path.to_path_buf(),
34 None => default_headless_config_path()?,
35 };
36
37 if !path.exists() {
38 return Ok(None);
39 }
40
41 let content = fs::read_to_string(&path)?;
42 let config = serde_json::from_str(&content)?;
43 Ok(Some(config))
44}