prgtw/big-number-serializer-bundle

Bundle for serializing BigNumber classes to/from string representation using JmsSerializer

1.1.0 2021-04-06 22:38 UTC

This package is auto-updated.

Last update: 2024-11-07 07:08:59 UTC


README

GitHub license Packagist GitHub Workflow Status

Bundle for serializing BigNumber classes to/from string representation using JmsSerializer.

Installation

  1. Require the prgtw/big-number-serializer-bundle package in your composer.json and update your dependencies.

    composer require prgtw/big-number-serializer-bundle
  2. Add the BigNumberSerializerBundle to your application's kernel:

    public function registerBundles()
    {
    	$bundles = [
    		// ...
    		new prgTW\BigNumberSerializerBundle(),
    		// ...
    	];
    	// ...
    }

Example

/**
 * @Serializer\ExclusionPolicy("NONE")
 */
class Temp
{
	/**
	 * @Serializer\SerializedName("integer")
	 * @Serializer\Type("Brick\Math\BigInteger")
	 */
	private BigInteger $integer;

	/**
	 * @Serializer\SerializedName("decimal")
	 * @Serializer\Type("Brick\Math\BigDecimal<'2'>")
	 */
	private BigDecimal $decimal;

	/**
	 * @Serializer\SerializedName("rational")
	 * @Serializer\Type("Brick\Math\BigRational")
	 */
	private BigRational $rational;

	public function __construct(BigInteger $integer, BigDecimal $decimal, BigRational $rational)
	{
		$this->integer  = $integer;
		$this->decimal  = $decimal;
		$this->rational = $rational;
	}

	public function getInteger(): BigInteger
	{
		return $this->integer;
	}

	public function getDecimal(): BigDecimal
	{
		return $this->decimal;
	}

	public function getRational(): BigRational
	{
		return $this->rational;
	}
}

// ----------------------------------------

$temp = new Temp(
	BigInteger::of('12345'),
	BigDecimal::of('123.4'), // scaled to 2 decimal places
	BigRational::of('4/7')
);

echo $jmsSerializer->serialize($temp, 'json');

Results

Before (without bundle)

{
  "integer": {"value": "12345"},
  "decimal": {"value": "12340", "scale": 2},
  "rational": {"numerator": {"value":"4"}, "denominator": {"value":"7"}}
}

After (using bundle)

{
  "integer": "12345",
  "decimal": "123.40",
  "rational": "4\/7"
}