use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
pub mod consent;
pub mod event;
pub mod identifier;
pub mod merge;
pub mod organization;
pub mod review_queue;
pub use consent::{Consent, ConsentStatus, ConsentType};
pub use event::{Event, EventLink, LinkType};
pub use identifier::{Identifier, IdentifierType, IdentifierUse};
pub use merge::{MergeRecord, MergeRequest, MergeResponse, MergeStatus};
pub use organization::Organization;
pub use review_queue::{
BatchDeduplicationRequest, BatchDeduplicationResponse, ReviewQueueItem, ReviewStatus,
};
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
pub struct Address {
pub use_type: Option<AddressUse>,
pub line1: Option<String>,
pub line2: Option<String>,
pub city: Option<String>,
pub state: Option<String>,
pub postal_code: Option<String>,
pub country: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum AddressUse {
Home,
Work,
Temp,
Old,
Billing,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
pub struct ContactPoint {
pub system: ContactPointSystem,
pub value: String,
pub use_type: Option<ContactPointUse>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum ContactPointSystem {
Phone,
Fax,
Email,
Pager,
Url,
Sms,
Other,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum ContactPointUse {
Home,
Work,
Temp,
Old,
Mobile,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum Location {
Place(Place),
PostalAddress(Address),
Virtual(VirtualLocation),
Text { value: String },
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq)]
pub struct Place {
pub id: Option<Uuid>,
pub name: String,
pub address: Option<Address>,
pub latitude: Option<f64>,
pub longitude: Option<f64>,
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
pub struct VirtualLocation {
pub name: Option<String>,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
pub struct Party {
pub kind: PartyKind,
pub id: Option<Uuid>,
pub name: String,
pub email: Option<String>,
pub url: Option<String>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum PartyKind {
Person,
Organization,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
pub struct Reference {
pub id: Option<Uuid>,
pub name: String,
pub url: Option<String>,
pub kind: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, PartialEq)]
pub struct Offer {
pub name: Option<String>,
pub price: Option<String>,
pub price_currency: Option<String>,
pub url: Option<String>,
pub availability: Option<OfferAvailability>,
pub valid_from: Option<chrono::DateTime<chrono::Utc>>,
pub valid_through: Option<chrono::DateTime<chrono::Utc>>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum OfferAvailability {
InStock,
SoldOut,
PreOrder,
OutOfStock,
Discontinued,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum EventStatus {
#[default]
Scheduled,
Cancelled,
MovedOnline,
Postponed,
Rescheduled,
Completed,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum EventAttendanceMode {
#[default]
Offline,
Online,
Mixed,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum EventType {
#[default]
Generic,
Appointment,
Business,
Childrens,
Comedy,
Conference,
Course,
Dance,
Delivery,
Education,
Encounter,
Exhibition,
Festival,
Food,
Hackathon,
Incident,
Literary,
Music,
PerformingArts,
Publication,
Sale,
Screening,
Series,
Session,
Shift,
Social,
Sports,
Theater,
VisualArts,
}