use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::models::advanced_commerce_request_info::AdvancedCommerceRequestInfo;
use crate::models::advanced_commerce_subscription_migrate_descriptors::AdvancedCommerceSubscriptionMigrateDescriptors;
use crate::models::advanced_commerce_subscription_migrate_item::AdvancedCommerceSubscriptionMigrateItem;
use crate::models::advanced_commerce_subscription_migrate_renewal_item::AdvancedCommerceSubscriptionMigrateRenewalItem;
use crate::models::helper_validation_utils::{validate_items, ValidationError};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AdvancedCommerceSubscriptionMigrateRequest {
pub request_info: AdvancedCommerceRequestInfo,
pub descriptors: AdvancedCommerceSubscriptionMigrateDescriptors,
pub items: Vec<AdvancedCommerceSubscriptionMigrateItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub renewal_items: Option<Vec<AdvancedCommerceSubscriptionMigrateRenewalItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub storefront: Option<String>,
pub target_product_id: String,
pub tax_code: String,
}
impl AdvancedCommerceSubscriptionMigrateRequest {
pub fn new(
request_reference_id: Uuid,
descriptors: AdvancedCommerceSubscriptionMigrateDescriptors,
items: Vec<AdvancedCommerceSubscriptionMigrateItem>,
target_product_id: String,
tax_code: String,
) -> Result<Self, ValidationError> {
Ok(Self {
request_info: AdvancedCommerceRequestInfo::new(request_reference_id),
descriptors,
items: validate_items(items)?,
renewal_items: None,
storefront: None,
target_product_id,
tax_code,
})
}
pub fn with_descriptors(mut self, descriptors: AdvancedCommerceSubscriptionMigrateDescriptors) -> Self {
self.descriptors = descriptors;
self
}
pub fn with_renewal_items(
mut self,
renewal_items: Vec<AdvancedCommerceSubscriptionMigrateRenewalItem>,
) -> Result<Self, ValidationError> {
self.renewal_items = Some(validate_items(renewal_items)?);
Ok(self)
}
pub fn with_storefront(mut self, storefront: String) -> Self {
self.storefront = Some(storefront);
self
}
pub fn with_request_info(mut self, request_info: AdvancedCommerceRequestInfo) -> Self {
self.request_info = request_info;
self
}
}