declare (strict_types=1);
namespace WPForms\Vendor\Square\Models;
use stdClass;
/**
* Represents an accrual rule, which defines how buyers can earn points from the base [loyalty
* program]($m/LoyaltyProgram).
*/
class LoyaltyProgramAccrualRule implements \JsonSerializable
{
/**
* @var string
*/
private $accrualType;
/**
* @var array
*/
private $points = [];
/**
* @var LoyaltyProgramAccrualRuleVisitData|null
*/
private $visitData;
/**
* @var LoyaltyProgramAccrualRuleSpendData|null
*/
private $spendData;
/**
* @var LoyaltyProgramAccrualRuleItemVariationData|null
*/
private $itemVariationData;
/**
* @var LoyaltyProgramAccrualRuleCategoryData|null
*/
private $categoryData;
/**
* @param string $accrualType
*/
public function __construct(string $accrualType)
{
$this->accrualType = $accrualType;
}
/**
* Returns Accrual Type.
* The type of the accrual rule that defines how buyers can earn points.
*/
public function getAccrualType() : string
{
return $this->accrualType;
}
/**
* Sets Accrual Type.
* The type of the accrual rule that defines how buyers can earn points.
*
* @required
* @maps accrual_type
*/
public function setAccrualType(string $accrualType) : void
{
$this->accrualType = $accrualType;
}
/**
* Returns Points.
* The number of points that
* buyers earn based on the `accrual_type`.
*/
public function getPoints() : ?int
{
if (\count($this->points) == 0) {
return null;
}
return $this->points['value'];
}
/**
* Sets Points.
* The number of points that
* buyers earn based on the `accrual_type`.
*
* @maps points
*/
public function setPoints(?int $points) : void
{
$this->points['value'] = $points;
}
/**
* Unsets Points.
* The number of points that
* buyers earn based on the `accrual_type`.
*/
public function unsetPoints() : void
{
$this->points = [];
}
/**
* Returns Visit Data.
* Represents additional data for rules with the `VISIT` accrual type.
*/
public function getVisitData() : ?LoyaltyProgramAccrualRuleVisitData
{
return $this->visitData;
}
/**
* Sets Visit Data.
* Represents additional data for rules with the `VISIT` accrual type.
*
* @maps visit_data
*/
public function setVisitData(?LoyaltyProgramAccrualRuleVisitData $visitData) : void
{
$this->visitData = $visitData;
}
/**
* Returns Spend Data.
* Represents additional data for rules with the `SPEND` accrual type.
*/
public function getSpendData() : ?LoyaltyProgramAccrualRuleSpendData
{
return $this->spendData;
}
/**
* Sets Spend Data.
* Represents additional data for rules with the `SPEND` accrual type.
*
* @maps spend_data
*/
public function setSpendData(?LoyaltyProgramAccrualRuleSpendData $spendData) : void
{
$this->spendData = $spendData;
}
/**
* Returns Item Variation Data.
* Represents additional data for rules with the `ITEM_VARIATION` accrual type.
*/
public function getItemVariationData() : ?LoyaltyProgramAccrualRuleItemVariationData
{
return $this->itemVariationData;
}
/**
* Sets Item Variation Data.
* Represents additional data for rules with the `ITEM_VARIATION` accrual type.
*
* @maps item_variation_data
*/
public function setItemVariationData(?LoyaltyProgramAccrualRuleItemVariationData $itemVariationData) : void
{
$this->itemVariationData = $itemVariationData;
}
/**
* Returns Category Data.
* Represents additional data for rules with the `CATEGORY` accrual type.
*/
public function getCategoryData() : ?LoyaltyProgramAccrualRuleCategoryData
{
return $this->categoryData;
}
/**
* Sets Category Data.
* Represents additional data for rules with the `CATEGORY` accrual type.
*
* @maps category_data
*/
public function setCategoryData(?LoyaltyProgramAccrualRuleCategoryData $categoryData) : void
{
$this->categoryData = $categoryData;
}
/**
* Encode this object to JSON
*
* @param bool $asArrayWhenEmpty Whether to serialize this model as an array whenever no fields
* are set. (default: false)
*
* @return array|stdClass
*/
#[\ReturnTypeWillChange] // @phan-suppress-current-line PhanUndeclaredClassAttribute for (php < 8.1)
public function jsonSerialize(bool $asArrayWhenEmpty = \false)
{
$json = [];
$json['accrual_type'] = $this->accrualType;
if (!empty($this->points)) {
$json['points'] = $this->points['value'];
}
if (isset($this->visitData)) {
$json['visit_data'] = $this->visitData;
}
if (isset($this->spendData)) {
$json['spend_data'] = $this->spendData;
}
if (isset($this->itemVariationData)) {
$json['item_variation_data'] = $this->itemVariationData;
}
if (isset($this->categoryData)) {
$json['category_data'] = $this->categoryData;
}
$json = \array_filter($json, function ($val) {
return $val !== null;
});
return !$asArrayWhenEmpty && empty($json) ? new stdClass() : $json;
}
}

It’s a little hard to recognize at first because the phone employs a sort of faux-futuristic gaming aesthetic. The device’s AI assistant is an anime character that struck me as odd at first, but it never obscured anything important. The gamer-ish look and feel is great for a small audience, but others may be looking for something that just isn’t quite awkward to be caught with in public.
They’re placed right where your index fingers naturally rest when holding the phone in landscape, which is excellent for high-intensity gaming. I even found myself using them in slower-paced games because the buttons were just that comfortable. Mobile Gaming has come a long way from those Java-powered flip phone games, and holding Xiaomi’s Black Shark 4 Pro in my hands is a firm reminder.
]]>