use crate::ids::{IdentityVerificationReportId};
use crate::params::{Object, Timestamp};
use crate::resources::{Address};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct IdentityVerificationReport {
pub id: IdentityVerificationReportId,
pub created: Timestamp,
#[serde(skip_serializing_if = "Option::is_none")]
pub document: Option<GelatoDocumentReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_number: Option<GelatoIdNumberReport>,
pub livemode: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<GelatoVerificationReportOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selfie: Option<GelatoSelfieReport>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<IdentityVerificationReportType>,
pub verification_session: Option<String>,
}
impl Object for IdentityVerificationReport {
type Id = IdentityVerificationReportId;
fn id(&self) -> Self::Id {
self.id.clone()
}
fn object(&self) -> &'static str {
"identity.verification_report"
}
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoDocumentReport {
pub address: Option<Address>,
pub dob: Option<GelatoDataDocumentReportDateOfBirth>,
pub error: Option<GelatoDocumentReportError>,
pub expiration_date: Option<GelatoDataDocumentReportExpirationDate>,
pub files: Option<Vec<String>>,
pub first_name: Option<String>,
pub issued_date: Option<GelatoDataDocumentReportIssuedDate>,
pub issuing_country: Option<String>,
pub last_name: Option<String>,
pub number: Option<String>,
pub status: GelatoDocumentReportStatus,
#[serde(rename = "type")]
pub type_: Option<GelatoDocumentReportType>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoDataDocumentReportDateOfBirth {
pub day: Option<i64>,
pub month: Option<i64>,
pub year: Option<i64>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoDataDocumentReportExpirationDate {
pub day: Option<i64>,
pub month: Option<i64>,
pub year: Option<i64>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoDataDocumentReportIssuedDate {
pub day: Option<i64>,
pub month: Option<i64>,
pub year: Option<i64>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoDocumentReportError {
pub code: Option<GelatoDocumentReportErrorCode>,
pub reason: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoIdNumberReport {
pub dob: Option<GelatoDataIdNumberReportDate>,
pub error: Option<GelatoIdNumberReportError>,
pub first_name: Option<String>,
pub id_number: Option<String>,
pub id_number_type: Option<GelatoIdNumberReportIdNumberType>,
pub last_name: Option<String>,
pub status: GelatoIdNumberReportStatus,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoDataIdNumberReportDate {
pub day: Option<i64>,
pub month: Option<i64>,
pub year: Option<i64>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoIdNumberReportError {
pub code: Option<GelatoIdNumberReportErrorCode>,
pub reason: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoSelfieReport {
pub document: Option<String>,
pub error: Option<GelatoSelfieReportError>,
pub selfie: Option<String>,
pub status: GelatoSelfieReportStatus,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoSelfieReportError {
pub code: Option<GelatoSelfieReportErrorCode>,
pub reason: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoVerificationReportOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub document: Option<GelatoReportDocumentOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_number: Option<GelatoReportIdNumberOptions>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoReportDocumentOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub allowed_types: Option<Vec<GelatoReportDocumentOptionsAllowedTypes>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_id_number: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_live_capture: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_matching_selfie: Option<bool>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct GelatoReportIdNumberOptions {
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoDocumentReportErrorCode {
DocumentExpired,
DocumentTypeNotSupported,
DocumentUnverifiedOther,
}
impl GelatoDocumentReportErrorCode {
pub fn as_str(self) -> &'static str {
match self {
GelatoDocumentReportErrorCode::DocumentExpired => "document_expired",
GelatoDocumentReportErrorCode::DocumentTypeNotSupported => "document_type_not_supported",
GelatoDocumentReportErrorCode::DocumentUnverifiedOther => "document_unverified_other",
}
}
}
impl AsRef<str> for GelatoDocumentReportErrorCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoDocumentReportErrorCode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoDocumentReportErrorCode {
fn default() -> Self {
Self::DocumentExpired
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoDocumentReportStatus {
Unverified,
Verified,
}
impl GelatoDocumentReportStatus {
pub fn as_str(self) -> &'static str {
match self {
GelatoDocumentReportStatus::Unverified => "unverified",
GelatoDocumentReportStatus::Verified => "verified",
}
}
}
impl AsRef<str> for GelatoDocumentReportStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoDocumentReportStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoDocumentReportStatus {
fn default() -> Self {
Self::Unverified
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoDocumentReportType {
DrivingLicense,
IdCard,
Passport,
}
impl GelatoDocumentReportType {
pub fn as_str(self) -> &'static str {
match self {
GelatoDocumentReportType::DrivingLicense => "driving_license",
GelatoDocumentReportType::IdCard => "id_card",
GelatoDocumentReportType::Passport => "passport",
}
}
}
impl AsRef<str> for GelatoDocumentReportType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoDocumentReportType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoDocumentReportType {
fn default() -> Self {
Self::DrivingLicense
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoIdNumberReportErrorCode {
IdNumberInsufficientDocumentData,
IdNumberMismatch,
IdNumberUnverifiedOther,
}
impl GelatoIdNumberReportErrorCode {
pub fn as_str(self) -> &'static str {
match self {
GelatoIdNumberReportErrorCode::IdNumberInsufficientDocumentData => "id_number_insufficient_document_data",
GelatoIdNumberReportErrorCode::IdNumberMismatch => "id_number_mismatch",
GelatoIdNumberReportErrorCode::IdNumberUnverifiedOther => "id_number_unverified_other",
}
}
}
impl AsRef<str> for GelatoIdNumberReportErrorCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoIdNumberReportErrorCode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoIdNumberReportErrorCode {
fn default() -> Self {
Self::IdNumberInsufficientDocumentData
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoIdNumberReportIdNumberType {
BrCpf,
SgNric,
UsSsn,
}
impl GelatoIdNumberReportIdNumberType {
pub fn as_str(self) -> &'static str {
match self {
GelatoIdNumberReportIdNumberType::BrCpf => "br_cpf",
GelatoIdNumberReportIdNumberType::SgNric => "sg_nric",
GelatoIdNumberReportIdNumberType::UsSsn => "us_ssn",
}
}
}
impl AsRef<str> for GelatoIdNumberReportIdNumberType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoIdNumberReportIdNumberType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoIdNumberReportIdNumberType {
fn default() -> Self {
Self::BrCpf
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoIdNumberReportStatus {
Unverified,
Verified,
}
impl GelatoIdNumberReportStatus {
pub fn as_str(self) -> &'static str {
match self {
GelatoIdNumberReportStatus::Unverified => "unverified",
GelatoIdNumberReportStatus::Verified => "verified",
}
}
}
impl AsRef<str> for GelatoIdNumberReportStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoIdNumberReportStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoIdNumberReportStatus {
fn default() -> Self {
Self::Unverified
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoReportDocumentOptionsAllowedTypes {
DrivingLicense,
IdCard,
Passport,
}
impl GelatoReportDocumentOptionsAllowedTypes {
pub fn as_str(self) -> &'static str {
match self {
GelatoReportDocumentOptionsAllowedTypes::DrivingLicense => "driving_license",
GelatoReportDocumentOptionsAllowedTypes::IdCard => "id_card",
GelatoReportDocumentOptionsAllowedTypes::Passport => "passport",
}
}
}
impl AsRef<str> for GelatoReportDocumentOptionsAllowedTypes {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoReportDocumentOptionsAllowedTypes {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoReportDocumentOptionsAllowedTypes {
fn default() -> Self {
Self::DrivingLicense
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoSelfieReportErrorCode {
SelfieDocumentMissingPhoto,
SelfieFaceMismatch,
SelfieManipulated,
SelfieUnverifiedOther,
}
impl GelatoSelfieReportErrorCode {
pub fn as_str(self) -> &'static str {
match self {
GelatoSelfieReportErrorCode::SelfieDocumentMissingPhoto => "selfie_document_missing_photo",
GelatoSelfieReportErrorCode::SelfieFaceMismatch => "selfie_face_mismatch",
GelatoSelfieReportErrorCode::SelfieManipulated => "selfie_manipulated",
GelatoSelfieReportErrorCode::SelfieUnverifiedOther => "selfie_unverified_other",
}
}
}
impl AsRef<str> for GelatoSelfieReportErrorCode {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoSelfieReportErrorCode {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoSelfieReportErrorCode {
fn default() -> Self {
Self::SelfieDocumentMissingPhoto
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum GelatoSelfieReportStatus {
Unverified,
Verified,
}
impl GelatoSelfieReportStatus {
pub fn as_str(self) -> &'static str {
match self {
GelatoSelfieReportStatus::Unverified => "unverified",
GelatoSelfieReportStatus::Verified => "verified",
}
}
}
impl AsRef<str> for GelatoSelfieReportStatus {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for GelatoSelfieReportStatus {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for GelatoSelfieReportStatus {
fn default() -> Self {
Self::Unverified
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum IdentityVerificationReportType {
Document,
IdNumber,
}
impl IdentityVerificationReportType {
pub fn as_str(self) -> &'static str {
match self {
IdentityVerificationReportType::Document => "document",
IdentityVerificationReportType::IdNumber => "id_number",
}
}
}
impl AsRef<str> for IdentityVerificationReportType {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for IdentityVerificationReportType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
impl std::default::Default for IdentityVerificationReportType {
fn default() -> Self {
Self::Document
}
}