use derive_builder::Builder;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use derivative::Derivative;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Builder, Derivative)]
#[derivative(Default)]
#[serde(default)]
#[allow(non_snake_case)]
pub struct Test {
#[builder(default = "2.0.to_string().into()", setter(into))]
#[derivative(Default(value = "\"2.0\".to_string()"))]
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into))]
#[derivative(Default)]
pub number: Option<TestNumberType>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[builder(default, setter(into, each(name = "to_test2")))]
#[derivative(Default)]
pub test2: Vec<Test2>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into))]
#[derivative(Default)]
pub ontology: Option<Ontology>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Builder, Derivative)]
#[derivative(Default)]
#[serde(default)]
#[allow(non_snake_case)]
pub struct Test2 {
#[serde(skip_serializing_if = "Vec::is_empty")]
#[builder(default, setter(into, each(name = "to_names")))]
#[derivative(Default)]
pub names: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into))]
#[derivative(Default)]
pub number: Option<f64>,
}
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default, PartialEq, Eq)]
pub enum Ontology {
#[default]
#[serde(rename = "https://www.evidenceontology.org/term/")]
Eco,
#[serde(rename = "https://amigo.geneontology.org/amigo/term/")]
Go,
#[serde(rename = "http://semanticscience.org/resource/")]
Sio,
}
#[allow(non_camel_case_types)]
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub enum TestNumberType {
F64(f64),
String(String),
}