checkout_core 0.0.147

core traits and structs for the checkout_controller crate
Documentation
use async_trait::async_trait;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

use crate::customer::Address;
use crate::error::Error;
use crate::item::Item;
use crate::money::{Currency, Money};

#[derive(Clone, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum Fulfillment {
    Pickup,
    Shipping { quote: ShippingQuote },
}

#[derive(Clone, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum FulfillmentSelection {
    Pickup,
    Shipping { quote_id: String },
}

#[derive(Clone, Serialize, Deserialize, JsonSchema)]
pub struct ShippingQuote {
    pub id: String,
    pub service: Service,
    pub price: Money,
    pub discount: Money,
}

#[derive(Clone, Serialize, Deserialize, JsonSchema)]
pub struct Courier {
    pub id: String,
    pub name: String,
}

#[derive(Clone, Serialize, Deserialize, JsonSchema)]
pub struct Service {
    pub id: String,
    pub courier: Courier,
    pub name: String,
}

#[async_trait]
pub trait ShippingCalculator {
    async fn get_shipping_quotes(
        &mut self,
        _currency: &Currency,
        _promo_codes: &Vec<String>,
        _items: &Vec<Item>,
        _address: &Address,
    ) -> Result<Vec<ShippingQuote>, Error> {
        Ok(vec![])
    }
}