open-logistics 0.3.0

Rust client for the Open Logistics Shiprocket and Delhivery APIs.
Documentation
/*
 * Open Logistics — Shiprocket
 *
 * OpenAPI description of the Shiprocket endpoints wrapped by `open-logistics`.  Source of truth for generated Python and Rust clients. Operation IDs and schema field names are intentionally snake_case so every language exposes the same names.  Two TypeScript methods (`checkServiceability` and `calculateRates`) call `GET /courier/serviceability`; OpenAPI permits one operation per path + method, so this spec exposes a single `courier_serviceability` operation. Language facades may alias it as `calculate_rates`. 
 *
 * The version of the OpenAPI document: 0.3.0
 * 
 * Generated by: https://openapi-generator.tech
 */

use crate::shiprocket::models;
use serde::{Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct CreateOrderPayload {
    #[serde(rename = "order_id")]
    pub order_id: String,
    /// YYYY-MM-DD HH:mm
    #[serde(rename = "order_date")]
    pub order_date: String,
    #[serde(rename = "pickup_location")]
    pub pickup_location: String,
    #[serde(rename = "billing_customer_name")]
    pub billing_customer_name: String,
    #[serde(rename = "billing_last_name", skip_serializing_if = "Option::is_none")]
    pub billing_last_name: Option<String>,
    #[serde(rename = "billing_address")]
    pub billing_address: String,
    #[serde(rename = "billing_city")]
    pub billing_city: String,
    #[serde(rename = "billing_pincode")]
    pub billing_pincode: String,
    #[serde(rename = "billing_state")]
    pub billing_state: String,
    #[serde(rename = "billing_country")]
    pub billing_country: String,
    #[serde(rename = "billing_email")]
    pub billing_email: String,
    #[serde(rename = "billing_phone")]
    pub billing_phone: String,
    #[serde(rename = "shipping_is_billing")]
    pub shipping_is_billing: bool,
    /// Required when `shipping_is_billing` is false.
    #[serde(rename = "shipping_customer_name", skip_serializing_if = "Option::is_none")]
    pub shipping_customer_name: Option<String>,
    #[serde(rename = "shipping_last_name", skip_serializing_if = "Option::is_none")]
    pub shipping_last_name: Option<String>,
    /// Required when `shipping_is_billing` is false.
    #[serde(rename = "shipping_address", skip_serializing_if = "Option::is_none")]
    pub shipping_address: Option<String>,
    #[serde(rename = "shipping_address_2", skip_serializing_if = "Option::is_none")]
    pub shipping_address_2: Option<String>,
    /// Required when `shipping_is_billing` is false.
    #[serde(rename = "shipping_city", skip_serializing_if = "Option::is_none")]
    pub shipping_city: Option<String>,
    /// Required when `shipping_is_billing` is false.
    #[serde(rename = "shipping_pincode", skip_serializing_if = "Option::is_none")]
    pub shipping_pincode: Option<String>,
    /// Required when `shipping_is_billing` is false.
    #[serde(rename = "shipping_state", skip_serializing_if = "Option::is_none")]
    pub shipping_state: Option<String>,
    /// Required when `shipping_is_billing` is false.
    #[serde(rename = "shipping_country", skip_serializing_if = "Option::is_none")]
    pub shipping_country: Option<String>,
    #[serde(rename = "shipping_email", skip_serializing_if = "Option::is_none")]
    pub shipping_email: Option<String>,
    /// Required when `shipping_is_billing` is false.
    #[serde(rename = "shipping_phone", skip_serializing_if = "Option::is_none")]
    pub shipping_phone: Option<String>,
    #[serde(rename = "order_items")]
    pub order_items: Vec<models::OrderItem>,
    #[serde(rename = "payment_method")]
    pub payment_method: PaymentMethod,
    #[serde(rename = "sub_total")]
    pub sub_total: f64,
    #[serde(rename = "length")]
    pub length: f64,
    #[serde(rename = "breadth")]
    pub breadth: f64,
    #[serde(rename = "height")]
    pub height: f64,
    #[serde(rename = "weight")]
    pub weight: f64,
}

impl CreateOrderPayload {
    pub fn new(order_id: String, order_date: String, pickup_location: String, billing_customer_name: String, billing_address: String, billing_city: String, billing_pincode: String, billing_state: String, billing_country: String, billing_email: String, billing_phone: String, shipping_is_billing: bool, order_items: Vec<models::OrderItem>, payment_method: PaymentMethod, sub_total: f64, length: f64, breadth: f64, height: f64, weight: f64) -> CreateOrderPayload {
        CreateOrderPayload {
            order_id,
            order_date,
            pickup_location,
            billing_customer_name,
            billing_last_name: None,
            billing_address,
            billing_city,
            billing_pincode,
            billing_state,
            billing_country,
            billing_email,
            billing_phone,
            shipping_is_billing,
            shipping_customer_name: None,
            shipping_last_name: None,
            shipping_address: None,
            shipping_address_2: None,
            shipping_city: None,
            shipping_pincode: None,
            shipping_state: None,
            shipping_country: None,
            shipping_email: None,
            shipping_phone: None,
            order_items,
            payment_method,
            sub_total,
            length,
            breadth,
            height,
            weight,
        }
    }
}
/// 
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum PaymentMethod {
    #[serde(rename = "prepaid")]
    Prepaid,
    #[serde(rename = "COD")]
    Cod,
}

impl Default for PaymentMethod {
    fn default() -> PaymentMethod {
        Self::Prepaid
    }
}