use serde_derive::{Deserialize, Serialize};
use crate::ids::IdentityVerificationReportId;
use crate::params::{Object, Timestamp};
use crate::resources::Address;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct IdentityVerificationReport {
pub id: IdentityVerificationReportId,
pub created: Timestamp,
#[serde(skip_serializing_if = "Option::is_none")]
pub document: Option<Box<GelatoDocumentReport>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_number: Option<Box<GelatoIdNumberReport>>,
pub livemode: bool,
pub options: GelatoVerificationReportOptions,
#[serde(skip_serializing_if = "Option::is_none")]
pub selfie: Option<Box<GelatoSelfieReport>>,
#[serde(rename = "type")]
pub type_: IdentityVerificationReportType,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification_session: Option<Box<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, Deserialize, Serialize)]
pub struct GelatoDocumentReport {
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Box<Address>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dob: Option<Box<GelatoDataDocumentReportDateOfBirth>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<Box<GelatoDocumentReportError>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiration_date: Option<Box<GelatoDataDocumentReportExpirationDate>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub files: Option<Box<Vec<String>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub first_name: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issued_date: Option<Box<GelatoDataDocumentReportIssuedDate>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issuing_country: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub number: Option<Box<String>>,
pub status: GelatoDocumentReportStatus,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub type_: Option<Box<GelatoDocumentReportType>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoDataDocumentReportDateOfBirth {
#[serde(skip_serializing_if = "Option::is_none")]
pub day: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub month: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub year: Option<Box<i64>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoDataDocumentReportExpirationDate {
#[serde(skip_serializing_if = "Option::is_none")]
pub day: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub month: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub year: Option<Box<i64>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoDataDocumentReportIssuedDate {
#[serde(skip_serializing_if = "Option::is_none")]
pub day: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub month: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub year: Option<Box<i64>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoDocumentReportError {
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<Box<GelatoDocumentReportErrorCode>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<Box<String>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoIdNumberReport {
#[serde(skip_serializing_if = "Option::is_none")]
pub dob: Option<Box<GelatoDataIdNumberReportDate>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<Box<GelatoIdNumberReportError>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub first_name: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_number: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_number_type: Option<Box<GelatoIdNumberReportIdNumberType>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<Box<String>>,
pub status: GelatoIdNumberReportStatus,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoDataIdNumberReportDate {
#[serde(skip_serializing_if = "Option::is_none")]
pub day: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub month: Option<Box<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub year: Option<Box<i64>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoIdNumberReportError {
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<Box<GelatoIdNumberReportErrorCode>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<Box<String>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoSelfieReport {
#[serde(skip_serializing_if = "Option::is_none")]
pub document: Option<Box<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<Box<GelatoSelfieReportError>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selfie: Option<Box<String>>,
pub status: GelatoSelfieReportStatus,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoSelfieReportError {
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<Box<GelatoSelfieReportErrorCode>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<Box<String>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoVerificationReportOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub document: Option<Box<GelatoReportDocumentOptions>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_number: Option<Box<GelatoReportIdNumberOptions>>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GelatoReportDocumentOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub allowed_types: Option<Box<Vec<GelatoReportDocumentOptionsAllowedTypes>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_id_number: Option<Box<bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_live_capture: Option<Box<bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_matching_selfie: Option<Box<bool>>,
}
#[derive(Clone, Debug, 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)
}
}
#[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)
}
}
#[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)
}
}
#[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)
}
}
#[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)
}
}
#[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)
}
}
#[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)
}
}
#[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)
}
}
#[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)
}
}
#[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)
}
}