use serde::{Serialize,Deserialize};
#[derive(Deserialize, Serialize, Debug, PartialEq, PartialOrd)]
pub struct Metadata<'a> {
pub module_name : &'a str,
pub namespace: &'a str,
pub version: &'a str,
pub java_version: Option<&'a str>,
pub ios_deployment_target: Option<&'a str>,
pub min_sdk: Option<u8>,
pub max_sdk: Option<u8>,
}
impl<'a> Metadata<'a> {
pub fn new(module_name: &'a str, namespace: &'a str, version: &'a str) -> Self {
Metadata {
module_name,
namespace,
version,
java_version: None,
ios_deployment_target: None,
min_sdk: None,
max_sdk: None,
}
}
pub fn with_java_version(mut self, java_version: &'a str) -> Self {
self.java_version = Some(java_version);
self
}
pub fn with_ios_deployment_target(mut self, ios_deployment_target: &'a str) -> Self {
self.ios_deployment_target = Some(ios_deployment_target);
self
}
pub fn with_min_sdk(mut self, min_sdk: u8) -> Self {
self.min_sdk = Some(min_sdk);
self
}
pub fn with_max_sdk(mut self, max_sdk: u8) -> Self {
self.max_sdk = Some(max_sdk);
self
}
}
impl std::fmt::Display for Metadata<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "object Metadata {{\n")?;
write!(f, " const val {} = \"{}\"\n", "module", self.module_name)?;
write!(f, " const val {} = \"{}\"\n", "namespace", self.namespace)?;
write!(f, " const val {} = \"{}\"\n", "version", self.version)?;
write!(f, "\n")?;
if let Some(java_version) = self.java_version {
write!(f, " const val {} = \"{}\"\n", "javaVersion", java_version)?;
write!(
f,
" val {} = {}\n",
"asJavaVersionEnum ",
"JavaVersion.values().find { it.name.endsWith(javaVersion) }"
)?;
}
if let Some(ios_deployment_target) = self.ios_deployment_target {
write!(f, " const val {} = \"{}\"\n", "iosDeploymentTarget", ios_deployment_target)?;
}
if let Some(min_sdk) = self.min_sdk {
write!(f, " const val {} = {}\n", "minSDK", min_sdk)?;
}
if let Some(max_sdk) = self.max_sdk {
write!(f, " const val {} = {}\n", "maxSDK", max_sdk)?;
}
write!(f, "}}\n\n")?;
Ok(())
}
}