use crate::common::{deserialize_opt_ms, serialize_opt_ms};
use crate::events::{
complex_field_types::{
Address, App, Booking, Browser, DigitalOrder, Image, Item, MerchantProfile, OrderedFrom,
PaymentMethod, Promotion,
},
reserved_fields::*,
AbuseType, Micros,
};
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use std::time::SystemTime;
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "$type")]
pub enum Event {
#[serde(rename = "$add_item_to_cart")]
AddItemToCart {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$session_id")]
session_id: Option<String>,
#[serde(flatten)]
properties: AddItemToCartProperties,
},
#[serde(rename = "$add_promotion")]
AddPromotion {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(flatten)]
properties: AddPromotionProperties,
},
#[serde(rename = "$chargeback")]
Chargeback {
#[serde(rename = "$order_id")]
order_id: Option<String>,
#[serde(rename = "$transaction_id")]
transaction_id: Option<String>,
#[serde(flatten)]
properties: ChargebackProperties,
},
#[serde(rename = "$content_status")]
ContentStatus {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$content_id")]
content_id: String,
#[serde(rename = "$status")]
status: ContentStatus,
#[serde(flatten)]
properties: ContentStatusProperties,
},
#[serde(rename = "$create_account")]
CreateAccount {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$session_id")]
session_id: Option<String>,
#[serde(flatten)]
properties: Box<CreateAccountProperties>,
},
#[serde(rename = "$create_content")]
CreateContent {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$content_id")]
content_id: String,
#[serde(flatten)]
content: Content,
#[serde(flatten)]
properties: ContentProperties,
},
#[serde(rename = "$create_order")]
CreateOrder {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(flatten)]
properties: OrderProperties,
},
#[serde(rename = "$flag_content")]
FlagContent {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$content_id")]
content_id: String,
#[serde(flatten)]
properties: FlagContentProperties,
},
#[serde(rename = "$link_session_to_user")]
LinkSessionToUser {
#[serde(rename = "$session_id")]
session_id: String,
#[serde(rename = "$user_id")]
user_id: String,
},
#[serde(rename = "$label")]
Label {
#[serde(rename = "$is_fraud")]
is_fraud: bool,
#[serde(rename = "$abuse_type")]
abuse_type: AbuseType,
#[serde(flatten)]
properties: LabelProperties,
},
#[serde(rename = "$login")]
Login {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$session_id")]
session_id: Option<String>,
#[serde(flatten)]
properties: LoginProperties,
},
#[serde(rename = "$logout")]
Logout {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(flatten)]
properties: LogoutProperties,
},
#[serde(rename = "$order_status")]
OrderStatus {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$order_id")]
order_id: String,
#[serde(rename = "$order_status")]
order_status: OrderStatus,
#[serde(flatten)]
properties: OrderStatusProperties,
},
#[serde(rename = "$remove_item_from_cart")]
RemoveItemFromCart {
#[serde(rename = "$session_id")]
session_id: Option<String>,
#[serde(rename = "$user_id")]
user_id: String,
#[serde(flatten)]
properties: RemoveItemFromCartProperties,
},
#[serde(rename = "$security_notification")]
SecurityNotification {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$session_id")]
session_id: String,
#[serde(rename = "$notification_status")]
notification_status: String,
#[serde(flatten)]
properties: SecurityNotificationProperties,
},
#[serde(rename = "$transaction")]
Transaction {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$amount")]
amount: Micros,
#[serde(rename = "$currency_code")]
currency_code: String,
#[serde(flatten)]
properties: Box<TransactionProperties>,
},
#[serde(rename = "$update_account")]
UpdateAccount {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(flatten)]
properties: Box<UpdateAccountProperties>,
},
#[serde(rename = "$update_content")]
UpdateContent {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$content_id")]
content_id: String,
#[serde(flatten)]
content: Content,
#[serde(flatten)]
properties: ContentProperties,
},
#[serde(rename = "$update_order")]
UpdateOrder {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(flatten)]
properties: OrderProperties,
},
#[serde(rename = "$update_password")]
UpdatePassword {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$reason")]
reason: UpdatePasswordReason,
#[serde(rename = "$status")]
status: UpdatePasswordStatus,
#[serde(flatten)]
properties: UpdatePasswordProperties,
},
#[serde(rename = "$verification")]
Verification {
#[serde(rename = "$user_id")]
user_id: String,
#[serde(rename = "$session_id")]
session_id: String,
#[serde(rename = "$status")]
status: VerificationStatus,
#[serde(flatten)]
properties: VerificationProperties,
},
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Content {
#[serde(rename = "$comment")]
Comment(CommentProperties),
#[serde(rename = "$listing")]
Listing(ListingProperties),
#[serde(rename = "$message")]
Message(MessageProperties),
#[serde(rename = "$post")]
Post(PostProperties),
#[serde(rename = "$profile")]
Profile(ProfileProperties),
#[serde(rename = "$review")]
Review(ReviewProperties),
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct CommentProperties {
#[serde(rename = "$body")]
pub body: Option<String>,
#[serde(rename = "$contact_email")]
pub contact_email: Option<String>,
#[serde(rename = "$parent_comment_id")]
pub parent_comment_id: Option<String>,
#[serde(rename = "$root_content_id")]
pub root_content_id: Option<String>,
#[serde(rename = "$images")]
pub images: Option<Vec<Image>>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ListingProperties {
#[serde(rename = "$subject")]
pub subject: Option<String>,
#[serde(rename = "$body")]
pub body: Option<String>,
#[serde(rename = "$contact_email")]
pub contact_email: Option<String>,
#[serde(rename = "$contact_address")]
pub contact_address: Option<Address>,
#[serde(rename = "$locations")]
pub locations: Option<Vec<Address>>,
#[serde(rename = "$listed_items")]
pub listed_items: Option<Vec<Item>>,
#[serde(rename = "$images")]
pub images: Option<Vec<Image>>,
#[serde(
rename = "$expiration_time",
deserialize_with = "deserialize_opt_ms",
serialize_with = "serialize_opt_ms"
)]
pub expiration_time: Option<SystemTime>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct MessageProperties {
#[serde(rename = "$subject")]
pub subject: Option<String>,
#[serde(rename = "$body")]
pub body: Option<String>,
#[serde(rename = "$contact_email")]
pub contact_email: Option<String>,
#[serde(rename = "$root_content_id")]
pub root_content_id: Option<String>,
#[serde(rename = "$recipient_user_ids")]
pub recipient_user_ids: Option<Vec<String>>,
#[serde(rename = "$images")]
pub images: Option<Vec<Image>>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct PostProperties {
#[serde(rename = "$subject")]
pub subject: Option<String>,
#[serde(rename = "$body")]
pub body: Option<String>,
#[serde(rename = "$contact_email")]
pub contact_email: Option<String>,
#[serde(rename = "$contact_address")]
pub contact_address: Option<Address>,
#[serde(rename = "$locations")]
pub locations: Option<Vec<Address>>,
#[serde(rename = "$categories")]
pub categories: Option<Vec<String>>,
#[serde(rename = "$images")]
pub images: Option<Vec<Image>>,
#[serde(
rename = "$expiration_time",
deserialize_with = "deserialize_opt_ms",
serialize_with = "serialize_opt_ms"
)]
pub expiration_time: Option<SystemTime>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ProfileProperties {
#[serde(rename = "$body")]
pub body: Option<String>,
#[serde(rename = "$contact_email")]
pub contact_email: Option<String>,
#[serde(rename = "$contact_address")]
pub contact_address: Option<Address>,
#[serde(rename = "$images")]
pub images: Option<Vec<Image>>,
#[serde(rename = "$categories")]
pub categories: Option<Vec<String>>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ReviewProperties {
#[serde(rename = "$subject")]
pub subject: Option<String>,
#[serde(rename = "$body")]
pub body: Option<String>,
#[serde(rename = "$contact_email")]
pub contact_email: Option<String>,
#[serde(rename = "$locations")]
pub locations: Option<Vec<Address>>,
#[serde(rename = "$item_reviewed")]
pub item_reviewed: Option<Item>,
#[serde(rename = "$reviewed_content_id")]
pub reviewed_content_id: Option<String>,
#[serde(rename = "$rating")]
pub rating: Option<f32>,
#[serde(rename = "$images")]
pub images: Option<Vec<Image>>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct AddItemToCartProperties {
#[serde(rename = "$item")]
pub item: Option<Item>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct AddPromotionProperties {
#[serde(rename = "$promotions")]
pub promotions: Option<Vec<Promotion>>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ChargebackProperties {
#[serde(rename = "$user_id")]
pub user_id: Option<String>,
#[serde(rename = "$chargeback_state")]
pub chargeback_state: Option<ChargebackState>,
#[serde(rename = "$chargeback_reason")]
pub chargeback_reason: Option<ChargebackReason>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ContentStatusProperties {
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct CreateAccountProperties {
#[serde(rename = "$user_email")]
pub user_email: Option<String>,
#[serde(rename = "$name")]
pub name: Option<String>,
#[serde(rename = "$phone")]
pub phone: Option<String>,
#[serde(rename = "$referrer_user_id")]
pub referrer_user_id: Option<String>,
#[serde(rename = "$payment_methods")]
pub payment_methods: Option<Vec<PaymentMethod>>,
#[serde(rename = "$billing_address")]
pub billing_address: Option<Address>,
#[serde(rename = "$shipping_address")]
pub shipping_address: Option<Address>,
#[serde(rename = "$promotions")]
pub promotions: Option<Vec<Promotion>>,
#[serde(rename = "$social_sign_on_type")]
pub social_sign_on_type: Option<SocialSignOn>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$account_types")]
pub account_types: Option<Vec<AccountType>>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct ContentProperties {
#[serde(rename = "$session_id")]
pub session_id: Option<String>,
#[serde(rename = "$status")]
pub status: Option<ContentStatus>,
#[serde(rename = "$ip")]
pub ip: Option<String>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct OrderProperties {
#[serde(rename = "$session_id")]
pub session_id: Option<String>,
#[serde(rename = "$order_id")]
pub order_id: Option<String>,
#[serde(rename = "$user_email")]
pub user_email: Option<String>,
#[serde(rename = "$verification_phone_number")]
pub verification_phone_number: Option<String>,
#[serde(rename = "$amount")]
pub amount: Option<Micros>,
#[serde(rename = "$currency_code")]
pub currency_code: Option<String>,
#[serde(rename = "$billing_address")]
pub billing_address: Option<Address>,
#[serde(rename = "$payment_methods")]
pub payment_methods: Option<Vec<PaymentMethod>>,
#[serde(rename = "$shipping_address")]
pub shipping_address: Option<Address>,
#[serde(rename = "$expedited_shipping")]
pub expedited_shipping: Option<bool>,
#[serde(rename = "$items")]
pub items: Option<Vec<Item>>,
#[serde(rename = "$bookings")]
pub bookings: Option<Vec<Booking>>,
#[serde(rename = "$seller_user_id")]
pub seller_user_id: Option<String>,
#[serde(rename = "$promotions")]
pub promotions: Option<Vec<Promotion>>,
#[serde(rename = "$shipping_method")]
pub shipping_method: Option<ShippingMethod>,
#[serde(rename = "$shipping_carrier")]
pub shipping_carrier: Option<String>,
#[serde(rename = "$shipping_tracking_numbers")]
pub shipping_tracking_numbers: Option<Vec<String>>,
#[serde(rename = "$ordered_from")]
pub ordered_from: Option<OrderedFrom>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(rename = "$merchant_profile")]
pub merchant_profile: Option<MerchantProfile>,
#[serde(rename = "$digital_orders")]
pub digital_orders: Vec<DigitalOrder>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct FlagContentProperties {
#[serde(rename = "$flagged_by")]
pub flagged_by: Option<String>,
#[serde(rename = "$reason")]
pub reason: Option<ContentFlagReason>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct LabelProperties {
#[serde(rename = "$description")]
pub description: Option<String>,
#[serde(rename = "$source")]
pub source: Option<String>,
#[serde(rename = "$analyst")]
pub analyst: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct LoginProperties {
#[serde(rename = "$login_status")]
pub login_status: Option<LoginStatus>,
#[serde(rename = "$user_email")]
pub user_email: Option<String>,
#[serde(rename = "$ip")]
pub ip: Option<String>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
pub failure_reason: Option<LoginFailureReason>,
pub username: Option<String>,
pub social_sign_on_type: Option<SocialSignOn>,
#[serde(rename = "$account_types")]
pub account_types: Option<Vec<AccountType>>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct LogoutProperties {
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct OrderStatusProperties {
#[serde(rename = "$reason")]
pub reason: Option<OrderCancellationReason>,
#[serde(rename = "$source")]
pub source: Option<DecisionSource>,
#[serde(rename = "$analyst")]
pub analyst: Option<String>,
#[serde(rename = "$webhook_id")]
pub webhook_id: Option<String>,
#[serde(rename = "$description")]
pub description: Option<String>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct RemoveItemFromCartProperties {
#[serde(rename = "$item")]
pub item: Option<Item>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct SecurityNotificationProperties {
#[serde(rename = "$notification_type")]
pub notification_type: Option<SecurityNotificationType>,
#[serde(rename = "$notified_value")]
pub notified_value: Option<String>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct TransactionProperties {
#[serde(rename = "$user_email")]
pub user_email: Option<String>,
#[serde(rename = "$verification_phone_number")]
pub verification_phone_number: Option<String>,
#[serde(rename = "$transaction_type")]
pub transaction_type: Option<TransactionType>,
#[serde(rename = "$transaction_status")]
pub transaction_status: Option<TransactionStatus>,
#[serde(rename = "$order_id")]
pub order_id: Option<String>,
#[serde(rename = "$transaction_id")]
pub transaction_id: Option<String>,
#[serde(rename = "$billing_address")]
pub billing_address: Option<Address>,
#[serde(rename = "$payment_method")]
pub payment_method: Option<PaymentMethod>,
#[serde(rename = "$shipping_address")]
pub shipping_address: Option<Address>,
#[serde(rename = "$session_id")]
pub session_id: Option<String>,
#[serde(rename = "$seller_user_id")]
pub seller_user_id: Option<String>,
#[serde(rename = "$transfer_recipient_user_id")]
pub transfer_recipient_user_id: Option<String>,
#[serde(rename = "$decline_category")]
pub decline_category: Option<DeclineCategory>,
#[serde(rename = "$ordered_from")]
pub ordered_from: Option<OrderedFrom>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(rename = "$status_3ds")]
pub status_3ds: Option<Status3Ds>,
#[serde(rename = "$triggered_3ds")]
pub triggered_3ds: Option<Triggered3Ds>,
#[serde(rename = "$merchant_initiated_transaction")]
pub merchant_initiated_transaction: Option<bool>,
#[serde(rename = "$merchant_initiated_transaction")]
pub merchant_profile: Option<MerchantProfile>,
#[serde(rename = "$sent_address")]
pub sent_address: Option<Address>,
#[serde(rename = "$received_address")]
pub received_address: Option<Address>,
#[serde(rename = "$digital_orders")]
pub digital_orders: Vec<DigitalOrder>,
#[serde(rename = "$receiver_wallet_address")]
pub receiver_wallet_address: Option<String>,
#[serde(rename = "$receiver_external_address")]
pub receiver_external_address: Option<bool>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct UpdateAccountProperties {
#[serde(rename = "$changed_password")]
pub changed_password: Option<bool>,
#[serde(rename = "$user_email")]
pub user_email: Option<String>,
#[serde(rename = "$name")]
pub name: Option<String>,
#[serde(rename = "$phone")]
pub phone: Option<String>,
#[serde(rename = "$referrer_user_id")]
pub referrer_user_id: Option<String>,
#[serde(rename = "$payment_methods")]
pub payment_methods: Option<Vec<PaymentMethod>>,
#[serde(rename = "$billing_address")]
pub billing_address: Option<Address>,
#[serde(rename = "$shipping_address")]
pub shipping_address: Option<Address>,
#[serde(rename = "$social_sign_on_type")]
pub social_sign_on_type: Option<SocialSignOn>,
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$account_types")]
pub account_types: Option<Vec<AccountType>>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct UpdatePasswordProperties {
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}
#[skip_serializing_none]
#[derive(Debug, Default, Serialize, Deserialize)]
pub struct VerificationProperties {
#[serde(rename = "$browser")]
pub browser: Option<Browser>,
#[serde(rename = "$app")]
pub app: Option<App>,
#[serde(rename = "$verified_event")]
pub verified_event: Option<VerifiedEvent>,
#[serde(rename = "$verified_entity_id")]
pub verified_entity_id: Option<String>,
#[serde(rename = "$verification_type")]
pub verification_type: Option<VerificationType>,
#[serde(rename = "$verified_value")]
pub verified_value: Option<String>,
#[serde(rename = "$reason")]
pub reason: Option<VerificationReason>,
#[serde(rename = "$brand_name")]
pub brand_name: Option<String>,
#[serde(rename = "$site_country")]
pub site_country: Option<String>,
#[serde(rename = "$site_domain")]
pub site_domain: Option<String>,
#[serde(flatten)]
pub extra: Option<serde_json::Value>,
}