pub mod event;
pub mod measurement;
pub mod occurrence;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum BasisOfRecordEnum<'a> {
HumanObservation,
MachineObservation,
PreservedSpecimen,
LivingSpecimen,
FossilSpecimen,
MaterialSample,
MaterialEntity,
MaterialCitation,
Other(jacquard_common::CowStr<'a>),
}
impl<'a> BasisOfRecordEnum<'a> {
pub fn as_str(&self) -> &str {
match self {
Self::HumanObservation => "HumanObservation",
Self::MachineObservation => "MachineObservation",
Self::PreservedSpecimen => "PreservedSpecimen",
Self::LivingSpecimen => "LivingSpecimen",
Self::FossilSpecimen => "FossilSpecimen",
Self::MaterialSample => "MaterialSample",
Self::MaterialEntity => "MaterialEntity",
Self::MaterialCitation => "MaterialCitation",
Self::Other(s) => s.as_ref(),
}
}
}
impl<'a> From<&'a str> for BasisOfRecordEnum<'a> {
fn from(s: &'a str) -> Self {
match s {
"HumanObservation" => Self::HumanObservation,
"MachineObservation" => Self::MachineObservation,
"PreservedSpecimen" => Self::PreservedSpecimen,
"LivingSpecimen" => Self::LivingSpecimen,
"FossilSpecimen" => Self::FossilSpecimen,
"MaterialSample" => Self::MaterialSample,
"MaterialEntity" => Self::MaterialEntity,
"MaterialCitation" => Self::MaterialCitation,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> From<String> for BasisOfRecordEnum<'a> {
fn from(s: String) -> Self {
match s.as_str() {
"HumanObservation" => Self::HumanObservation,
"MachineObservation" => Self::MachineObservation,
"PreservedSpecimen" => Self::PreservedSpecimen,
"LivingSpecimen" => Self::LivingSpecimen,
"FossilSpecimen" => Self::FossilSpecimen,
"MaterialSample" => Self::MaterialSample,
"MaterialEntity" => Self::MaterialEntity,
"MaterialCitation" => Self::MaterialCitation,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> AsRef<str> for BasisOfRecordEnum<'a> {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl<'a> core::fmt::Display for BasisOfRecordEnum<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl<'a> serde::Serialize for BasisOfRecordEnum<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl<'de, 'a> serde::Deserialize<'de> for BasisOfRecordEnum<'a>
where
'de: 'a,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = <&'de str>::deserialize(deserializer)?;
Ok(Self::from(s))
}
}
impl jacquard_common::IntoStatic for BasisOfRecordEnum<'_> {
type Output = BasisOfRecordEnum<'static>;
fn into_static(self) -> Self::Output {
match self {
BasisOfRecordEnum::HumanObservation => BasisOfRecordEnum::HumanObservation,
BasisOfRecordEnum::MachineObservation => {
BasisOfRecordEnum::MachineObservation
}
BasisOfRecordEnum::PreservedSpecimen => BasisOfRecordEnum::PreservedSpecimen,
BasisOfRecordEnum::LivingSpecimen => BasisOfRecordEnum::LivingSpecimen,
BasisOfRecordEnum::FossilSpecimen => BasisOfRecordEnum::FossilSpecimen,
BasisOfRecordEnum::MaterialSample => BasisOfRecordEnum::MaterialSample,
BasisOfRecordEnum::MaterialEntity => BasisOfRecordEnum::MaterialEntity,
BasisOfRecordEnum::MaterialCitation => BasisOfRecordEnum::MaterialCitation,
BasisOfRecordEnum::Other(v) => BasisOfRecordEnum::Other(v.into_static()),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DublinCoreTypeEnum<'a> {
PhysicalObject,
StillImage,
MovingImage,
Sound,
Text,
Event,
Dataset,
Other(jacquard_common::CowStr<'a>),
}
impl<'a> DublinCoreTypeEnum<'a> {
pub fn as_str(&self) -> &str {
match self {
Self::PhysicalObject => "PhysicalObject",
Self::StillImage => "StillImage",
Self::MovingImage => "MovingImage",
Self::Sound => "Sound",
Self::Text => "Text",
Self::Event => "Event",
Self::Dataset => "Dataset",
Self::Other(s) => s.as_ref(),
}
}
}
impl<'a> From<&'a str> for DublinCoreTypeEnum<'a> {
fn from(s: &'a str) -> Self {
match s {
"PhysicalObject" => Self::PhysicalObject,
"StillImage" => Self::StillImage,
"MovingImage" => Self::MovingImage,
"Sound" => Self::Sound,
"Text" => Self::Text,
"Event" => Self::Event,
"Dataset" => Self::Dataset,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> From<String> for DublinCoreTypeEnum<'a> {
fn from(s: String) -> Self {
match s.as_str() {
"PhysicalObject" => Self::PhysicalObject,
"StillImage" => Self::StillImage,
"MovingImage" => Self::MovingImage,
"Sound" => Self::Sound,
"Text" => Self::Text,
"Event" => Self::Event,
"Dataset" => Self::Dataset,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> AsRef<str> for DublinCoreTypeEnum<'a> {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl<'a> core::fmt::Display for DublinCoreTypeEnum<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl<'a> serde::Serialize for DublinCoreTypeEnum<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl<'de, 'a> serde::Deserialize<'de> for DublinCoreTypeEnum<'a>
where
'de: 'a,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = <&'de str>::deserialize(deserializer)?;
Ok(Self::from(s))
}
}
impl jacquard_common::IntoStatic for DublinCoreTypeEnum<'_> {
type Output = DublinCoreTypeEnum<'static>;
fn into_static(self) -> Self::Output {
match self {
DublinCoreTypeEnum::PhysicalObject => DublinCoreTypeEnum::PhysicalObject,
DublinCoreTypeEnum::StillImage => DublinCoreTypeEnum::StillImage,
DublinCoreTypeEnum::MovingImage => DublinCoreTypeEnum::MovingImage,
DublinCoreTypeEnum::Sound => DublinCoreTypeEnum::Sound,
DublinCoreTypeEnum::Text => DublinCoreTypeEnum::Text,
DublinCoreTypeEnum::Event => DublinCoreTypeEnum::Event,
DublinCoreTypeEnum::Dataset => DublinCoreTypeEnum::Dataset,
DublinCoreTypeEnum::Other(v) => DublinCoreTypeEnum::Other(v.into_static()),
}
}
}
#[jacquard_derive::lexicon]
#[derive(
serde::Serialize,
serde::Deserialize,
Debug,
Clone,
PartialEq,
Eq,
jacquard_derive::IntoStatic,
Default
)]
#[serde(rename_all = "camelCase")]
pub struct Geolocation<'a> {
#[serde(skip_serializing_if = "std::option::Option::is_none")]
pub coordinate_uncertainty_in_meters: std::option::Option<i64>,
#[serde(borrow)]
pub decimal_latitude: jacquard_common::CowStr<'a>,
#[serde(borrow)]
pub decimal_longitude: jacquard_common::CowStr<'a>,
#[serde(skip_serializing_if = "std::option::Option::is_none")]
#[serde(borrow)]
pub geodetic_datum: std::option::Option<jacquard_common::CowStr<'a>>,
}
fn lexicon_doc_app_gainforest_dwc_defs() -> ::jacquard_lexicon::lexicon::LexiconDoc<
'static,
> {
::jacquard_lexicon::lexicon::LexiconDoc {
lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1,
id: ::jacquard_common::CowStr::new_static("app.gainforest.dwc.defs"),
revision: None,
description: None,
defs: {
let mut map = ::alloc::collections::BTreeMap::new();
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"basisOfRecordEnum",
),
::jacquard_lexicon::lexicon::LexUserType::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"The specific nature of the data record. Controlled vocabulary per Darwin Core.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"dublinCoreTypeEnum",
),
::jacquard_lexicon::lexicon::LexUserType::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Dublin Core type vocabulary for the nature of the resource.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static("geolocation"),
::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject {
description: Some(
::jacquard_common::CowStr::new_static(
"A geographic point with uncertainty, following Darwin Core Location class",
),
),
required: Some(
vec![
::jacquard_common::deps::smol_str::SmolStr::new_static("decimalLatitude"),
::jacquard_common::deps::smol_str::SmolStr::new_static("decimalLongitude")
],
),
nullable: None,
properties: {
#[allow(unused_mut)]
let mut map = ::alloc::collections::BTreeMap::new();
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"coordinateUncertaintyInMeters",
),
::jacquard_lexicon::lexicon::LexObjectProperty::Integer(::jacquard_lexicon::lexicon::LexInteger {
description: None,
default: None,
minimum: Some(1i64),
maximum: None,
r#enum: None,
r#const: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"decimalLatitude",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Geographic latitude in decimal degrees (WGS84). Positive values north of the Equator, negative south. Range: -90 to 90.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(32usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"decimalLongitude",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Geographic longitude in decimal degrees (WGS84). Positive values east of the Greenwich Meridian, negative west. Range: -180 to 180.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(32usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"geodeticDatum",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"The ellipsoid, geodetic datum, or spatial reference system. Recommended: 'EPSG:4326' (WGS84)",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map
},
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"nomenclaturalCodeEnum",
),
::jacquard_lexicon::lexicon::LexUserType::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"The nomenclatural code under which the scientific name is constructed.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"occurrenceStatusEnum",
),
::jacquard_lexicon::lexicon::LexUserType::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Statement about the presence or absence of a taxon at a location.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static("sexEnum"),
::jacquard_lexicon::lexicon::LexUserType::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"The sex of the biological individual(s) represented in the occurrence.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"taxonIdentification",
),
::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject {
description: Some(
::jacquard_common::CowStr::new_static(
"A taxonomic identification with provenance metadata",
),
),
required: Some(
vec![
::jacquard_common::deps::smol_str::SmolStr::new_static("scientificName")
],
),
nullable: None,
properties: {
#[allow(unused_mut)]
let mut map = ::alloc::collections::BTreeMap::new();
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"dateIdentified",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Date the identification was made (ISO 8601)",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"gbifTaxonKey",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"GBIF backbone taxonomy key for the identified taxon",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"identificationQualifier",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Uncertainty qualifier applied to the taxon name (e.g., 'cf. agrestis', 'aff. agrestis')",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(256usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"identificationRemarks",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Notes or comments about the identification",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(2048usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"identifiedBy",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"Person(s) who made the identification (pipe-delimited for multiple)",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(512usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"identifiedByID",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"ORCID or other persistent identifier for the person(s) who identified (pipe-delimited)",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(512usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static(
"scientificName",
),
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"The full scientific name including authorship and date",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(512usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map
},
}),
);
map.insert(
::jacquard_common::deps::smol_str::SmolStr::new_static("taxonRankEnum"),
::jacquard_lexicon::lexicon::LexUserType::String(::jacquard_lexicon::lexicon::LexString {
description: Some(
::jacquard_common::CowStr::new_static(
"The taxonomic rank of the most specific name in the scientificName.",
),
),
format: None,
default: None,
min_length: None,
max_length: None,
min_graphemes: None,
max_graphemes: Some(64usize),
r#enum: None,
r#const: None,
known_values: None,
}),
);
map
},
}
}
impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Geolocation<'a> {
fn nsid() -> &'static str {
"app.gainforest.dwc.defs"
}
fn def_name() -> &'static str {
"geolocation"
}
fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
lexicon_doc_app_gainforest_dwc_defs()
}
fn validate(
&self,
) -> ::core::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
if let Some(ref value) = self.coordinate_uncertainty_in_meters {
if *value < 1i64 {
return Err(::jacquard_lexicon::validation::ConstraintError::Minimum {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"coordinate_uncertainty_in_meters",
),
min: 1i64,
actual: *value,
});
}
}
{
let value = &self.decimal_latitude;
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 32usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"decimal_latitude",
),
max: 32usize,
actual: count,
});
}
}
}
{
let value = &self.decimal_longitude;
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 32usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"decimal_longitude",
),
max: 32usize,
actual: count,
});
}
}
}
if let Some(ref value) = self.geodetic_datum {
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 64usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"geodetic_datum",
),
max: 64usize,
actual: count,
});
}
}
}
Ok(())
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum NomenclaturalCodeEnum<'a> {
Iczn,
Icn,
Icnp,
Ictv,
BioCode,
Other(jacquard_common::CowStr<'a>),
}
impl<'a> NomenclaturalCodeEnum<'a> {
pub fn as_str(&self) -> &str {
match self {
Self::Iczn => "ICZN",
Self::Icn => "ICN",
Self::Icnp => "ICNP",
Self::Ictv => "ICTV",
Self::BioCode => "BioCode",
Self::Other(s) => s.as_ref(),
}
}
}
impl<'a> From<&'a str> for NomenclaturalCodeEnum<'a> {
fn from(s: &'a str) -> Self {
match s {
"ICZN" => Self::Iczn,
"ICN" => Self::Icn,
"ICNP" => Self::Icnp,
"ICTV" => Self::Ictv,
"BioCode" => Self::BioCode,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> From<String> for NomenclaturalCodeEnum<'a> {
fn from(s: String) -> Self {
match s.as_str() {
"ICZN" => Self::Iczn,
"ICN" => Self::Icn,
"ICNP" => Self::Icnp,
"ICTV" => Self::Ictv,
"BioCode" => Self::BioCode,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> AsRef<str> for NomenclaturalCodeEnum<'a> {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl<'a> core::fmt::Display for NomenclaturalCodeEnum<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl<'a> serde::Serialize for NomenclaturalCodeEnum<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl<'de, 'a> serde::Deserialize<'de> for NomenclaturalCodeEnum<'a>
where
'de: 'a,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = <&'de str>::deserialize(deserializer)?;
Ok(Self::from(s))
}
}
impl jacquard_common::IntoStatic for NomenclaturalCodeEnum<'_> {
type Output = NomenclaturalCodeEnum<'static>;
fn into_static(self) -> Self::Output {
match self {
NomenclaturalCodeEnum::Iczn => NomenclaturalCodeEnum::Iczn,
NomenclaturalCodeEnum::Icn => NomenclaturalCodeEnum::Icn,
NomenclaturalCodeEnum::Icnp => NomenclaturalCodeEnum::Icnp,
NomenclaturalCodeEnum::Ictv => NomenclaturalCodeEnum::Ictv,
NomenclaturalCodeEnum::BioCode => NomenclaturalCodeEnum::BioCode,
NomenclaturalCodeEnum::Other(v) => {
NomenclaturalCodeEnum::Other(v.into_static())
}
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum OccurrenceStatusEnum<'a> {
Present,
Absent,
Other(jacquard_common::CowStr<'a>),
}
impl<'a> OccurrenceStatusEnum<'a> {
pub fn as_str(&self) -> &str {
match self {
Self::Present => "present",
Self::Absent => "absent",
Self::Other(s) => s.as_ref(),
}
}
}
impl<'a> From<&'a str> for OccurrenceStatusEnum<'a> {
fn from(s: &'a str) -> Self {
match s {
"present" => Self::Present,
"absent" => Self::Absent,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> From<String> for OccurrenceStatusEnum<'a> {
fn from(s: String) -> Self {
match s.as_str() {
"present" => Self::Present,
"absent" => Self::Absent,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> AsRef<str> for OccurrenceStatusEnum<'a> {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl<'a> core::fmt::Display for OccurrenceStatusEnum<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl<'a> serde::Serialize for OccurrenceStatusEnum<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl<'de, 'a> serde::Deserialize<'de> for OccurrenceStatusEnum<'a>
where
'de: 'a,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = <&'de str>::deserialize(deserializer)?;
Ok(Self::from(s))
}
}
impl jacquard_common::IntoStatic for OccurrenceStatusEnum<'_> {
type Output = OccurrenceStatusEnum<'static>;
fn into_static(self) -> Self::Output {
match self {
OccurrenceStatusEnum::Present => OccurrenceStatusEnum::Present,
OccurrenceStatusEnum::Absent => OccurrenceStatusEnum::Absent,
OccurrenceStatusEnum::Other(v) => {
OccurrenceStatusEnum::Other(v.into_static())
}
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum SexEnum<'a> {
Male,
Female,
Hermaphrodite,
Other(jacquard_common::CowStr<'a>),
}
impl<'a> SexEnum<'a> {
pub fn as_str(&self) -> &str {
match self {
Self::Male => "male",
Self::Female => "female",
Self::Hermaphrodite => "hermaphrodite",
Self::Other(s) => s.as_ref(),
}
}
}
impl<'a> From<&'a str> for SexEnum<'a> {
fn from(s: &'a str) -> Self {
match s {
"male" => Self::Male,
"female" => Self::Female,
"hermaphrodite" => Self::Hermaphrodite,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> From<String> for SexEnum<'a> {
fn from(s: String) -> Self {
match s.as_str() {
"male" => Self::Male,
"female" => Self::Female,
"hermaphrodite" => Self::Hermaphrodite,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> AsRef<str> for SexEnum<'a> {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl<'a> core::fmt::Display for SexEnum<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl<'a> serde::Serialize for SexEnum<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl<'de, 'a> serde::Deserialize<'de> for SexEnum<'a>
where
'de: 'a,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = <&'de str>::deserialize(deserializer)?;
Ok(Self::from(s))
}
}
impl jacquard_common::IntoStatic for SexEnum<'_> {
type Output = SexEnum<'static>;
fn into_static(self) -> Self::Output {
match self {
SexEnum::Male => SexEnum::Male,
SexEnum::Female => SexEnum::Female,
SexEnum::Hermaphrodite => SexEnum::Hermaphrodite,
SexEnum::Other(v) => SexEnum::Other(v.into_static()),
}
}
}
#[jacquard_derive::lexicon]
#[derive(
serde::Serialize,
serde::Deserialize,
Debug,
Clone,
PartialEq,
Eq,
jacquard_derive::IntoStatic,
Default
)]
#[serde(rename_all = "camelCase")]
pub struct TaxonIdentification<'a> {
#[serde(skip_serializing_if = "std::option::Option::is_none")]
#[serde(borrow)]
pub date_identified: std::option::Option<jacquard_common::CowStr<'a>>,
#[serde(skip_serializing_if = "std::option::Option::is_none")]
#[serde(borrow)]
pub gbif_taxon_key: std::option::Option<jacquard_common::CowStr<'a>>,
#[serde(skip_serializing_if = "std::option::Option::is_none")]
#[serde(borrow)]
pub identification_qualifier: std::option::Option<jacquard_common::CowStr<'a>>,
#[serde(skip_serializing_if = "std::option::Option::is_none")]
#[serde(borrow)]
pub identification_remarks: std::option::Option<jacquard_common::CowStr<'a>>,
#[serde(skip_serializing_if = "std::option::Option::is_none")]
#[serde(borrow)]
pub identified_by: std::option::Option<jacquard_common::CowStr<'a>>,
#[serde(skip_serializing_if = "std::option::Option::is_none")]
#[serde(borrow)]
pub identified_by_id: std::option::Option<jacquard_common::CowStr<'a>>,
#[serde(borrow)]
pub scientific_name: jacquard_common::CowStr<'a>,
}
impl<'a> ::jacquard_lexicon::schema::LexiconSchema for TaxonIdentification<'a> {
fn nsid() -> &'static str {
"app.gainforest.dwc.defs"
}
fn def_name() -> &'static str {
"taxonIdentification"
}
fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
lexicon_doc_app_gainforest_dwc_defs()
}
fn validate(
&self,
) -> ::core::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
if let Some(ref value) = self.date_identified {
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 64usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"date_identified",
),
max: 64usize,
actual: count,
});
}
}
}
if let Some(ref value) = self.gbif_taxon_key {
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 64usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"gbif_taxon_key",
),
max: 64usize,
actual: count,
});
}
}
}
if let Some(ref value) = self.identification_qualifier {
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 256usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"identification_qualifier",
),
max: 256usize,
actual: count,
});
}
}
}
if let Some(ref value) = self.identification_remarks {
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 2048usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"identification_remarks",
),
max: 2048usize,
actual: count,
});
}
}
}
if let Some(ref value) = self.identified_by {
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 512usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"identified_by",
),
max: 512usize,
actual: count,
});
}
}
}
if let Some(ref value) = self.identified_by_id {
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 512usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"identified_by_id",
),
max: 512usize,
actual: count,
});
}
}
}
{
let value = &self.scientific_name;
{
let count = jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation::graphemes(
value.as_ref(),
true,
)
.count();
if count > 512usize {
return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
"scientific_name",
),
max: 512usize,
actual: count,
});
}
}
}
Ok(())
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum TaxonRankEnum<'a> {
Kingdom,
Phylum,
Class,
Order,
Family,
Subfamily,
Genus,
Subgenus,
Species,
Subspecies,
Variety,
Form,
Other(jacquard_common::CowStr<'a>),
}
impl<'a> TaxonRankEnum<'a> {
pub fn as_str(&self) -> &str {
match self {
Self::Kingdom => "kingdom",
Self::Phylum => "phylum",
Self::Class => "class",
Self::Order => "order",
Self::Family => "family",
Self::Subfamily => "subfamily",
Self::Genus => "genus",
Self::Subgenus => "subgenus",
Self::Species => "species",
Self::Subspecies => "subspecies",
Self::Variety => "variety",
Self::Form => "form",
Self::Other(s) => s.as_ref(),
}
}
}
impl<'a> From<&'a str> for TaxonRankEnum<'a> {
fn from(s: &'a str) -> Self {
match s {
"kingdom" => Self::Kingdom,
"phylum" => Self::Phylum,
"class" => Self::Class,
"order" => Self::Order,
"family" => Self::Family,
"subfamily" => Self::Subfamily,
"genus" => Self::Genus,
"subgenus" => Self::Subgenus,
"species" => Self::Species,
"subspecies" => Self::Subspecies,
"variety" => Self::Variety,
"form" => Self::Form,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> From<String> for TaxonRankEnum<'a> {
fn from(s: String) -> Self {
match s.as_str() {
"kingdom" => Self::Kingdom,
"phylum" => Self::Phylum,
"class" => Self::Class,
"order" => Self::Order,
"family" => Self::Family,
"subfamily" => Self::Subfamily,
"genus" => Self::Genus,
"subgenus" => Self::Subgenus,
"species" => Self::Species,
"subspecies" => Self::Subspecies,
"variety" => Self::Variety,
"form" => Self::Form,
_ => Self::Other(jacquard_common::CowStr::from(s)),
}
}
}
impl<'a> AsRef<str> for TaxonRankEnum<'a> {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl<'a> core::fmt::Display for TaxonRankEnum<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl<'a> serde::Serialize for TaxonRankEnum<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.as_str())
}
}
impl<'de, 'a> serde::Deserialize<'de> for TaxonRankEnum<'a>
where
'de: 'a,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = <&'de str>::deserialize(deserializer)?;
Ok(Self::from(s))
}
}
impl jacquard_common::IntoStatic for TaxonRankEnum<'_> {
type Output = TaxonRankEnum<'static>;
fn into_static(self) -> Self::Output {
match self {
TaxonRankEnum::Kingdom => TaxonRankEnum::Kingdom,
TaxonRankEnum::Phylum => TaxonRankEnum::Phylum,
TaxonRankEnum::Class => TaxonRankEnum::Class,
TaxonRankEnum::Order => TaxonRankEnum::Order,
TaxonRankEnum::Family => TaxonRankEnum::Family,
TaxonRankEnum::Subfamily => TaxonRankEnum::Subfamily,
TaxonRankEnum::Genus => TaxonRankEnum::Genus,
TaxonRankEnum::Subgenus => TaxonRankEnum::Subgenus,
TaxonRankEnum::Species => TaxonRankEnum::Species,
TaxonRankEnum::Subspecies => TaxonRankEnum::Subspecies,
TaxonRankEnum::Variety => TaxonRankEnum::Variety,
TaxonRankEnum::Form => TaxonRankEnum::Form,
TaxonRankEnum::Other(v) => TaxonRankEnum::Other(v.into_static()),
}
}
}