use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub(crate) struct ApplicationConfig {
#[serde(default)]
pub(crate) name: Option<String>,
#[serde(default)]
pub(crate) asset_dir: Option<PathBuf>,
#[serde(default)]
pub(crate) out_dir: Option<PathBuf>,
#[serde(default = "public_dir_default")]
#[serde(deserialize_with = "empty_string_is_none")]
pub(crate) public_dir: Option<PathBuf>,
#[serde(default)]
pub(crate) tailwind_input: Option<PathBuf>,
#[serde(default)]
pub(crate) tailwind_output: Option<PathBuf>,
#[serde(default)]
pub(crate) ios_info_plist: Option<PathBuf>,
#[serde(default)]
pub(crate) macos_info_plist: Option<PathBuf>,
#[serde(default)]
pub(crate) ios_entitlements: Option<PathBuf>,
#[serde(default)]
pub(crate) macos_entitlements: Option<PathBuf>,
#[serde(default)]
pub(crate) android_manifest: Option<PathBuf>,
#[serde(default)]
pub(crate) android_main_activity: Option<PathBuf>,
#[serde(default)]
pub(crate) android_min_sdk_version: Option<u32>,
}
fn public_dir_default() -> Option<PathBuf> {
Some("public".into())
}
fn empty_string_is_none<'de, D>(deserializer: D) -> Result<Option<PathBuf>, D::Error>
where
D: serde::Deserializer<'de>,
{
let opt: Option<String> = Option::deserialize(deserializer)?;
match opt {
Some(s) if s.is_empty() => Ok(None),
Some(s) => Ok(Some(PathBuf::from(s))),
None => Ok(None),
}
}