<?php declare( strict_types=1 ); namespace Automattic\WooCommerce\GoogleListingsAndAds\Shipping; use JsonSerializable; defined( 'ABSPATH' ) || exit; /** * Class ShippingRate * * @package Automattic\WooCommerce\GoogleListingsAndAds\Shipping * * @since 2.1.0 */ class ShippingRate implements JsonSerializable { /** * @var float */ protected $rate; /** * @var float|null */ protected $min_order_amount; /** * @var array */ protected $applicable_classes = []; /** * ShippingRate constructor. * * @param float $rate The shipping cost in store currency. */ public function __construct( float $rate ) { $this->rate = $rate; } /** * @return float */ public function get_rate(): float { return $this->rate; } /** * @param float $rate * * @return ShippingRate */ public function set_rate( float $rate ): ShippingRate { $this->rate = $rate; return $this; } /** * Returns whether the shipping rate is free. * * @return bool */ public function is_free(): bool { return 0.0 === $this->get_rate(); } /** * @return float|null */ public function get_min_order_amount(): ?float { return $this->min_order_amount; } /** * @param float|null $min_order_amount */ public function set_min_order_amount( ?float $min_order_amount ): void { $this->min_order_amount = $min_order_amount; } /** * Returns whether the shipping rate has a minimum order amount constraint. * * @return bool */ public function has_min_order_amount(): bool { return ! is_null( $this->get_min_order_amount() ); } /** * @return string[] */ public function get_applicable_classes(): array { return $this->applicable_classes; } /** * @param string[] $applicable_classes * * @return ShippingRate */ public function set_applicable_classes( array $applicable_classes ): ShippingRate { $this->applicable_classes = $applicable_classes; return $this; } /** * Specify data which should be serialized to JSON */ public function jsonSerialize() { return [ 'rate' => $this->get_rate(), ]; } }