prgtw / big-number-serializer-bundle
Bundle for serializing BigNumber classes to/from string representation using JmsSerializer
Installs: 95 257
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: ^7.4 || ^8.0
- brick/math: ^0.9.2
- jms/serializer: ^1 || ^3
- jms/serializer-bundle: ^1 || ^2 || ^3
- symfony/config: ^2 || ^3 || ^4
- symfony/dependency-injection: ^2 || ^3 || ^4
- symfony/http-kernel: ^2 || ^3 || ^4
Requires (Dev)
- phpunit/phpunit: ^9.5
- roave/security-advisories: dev-latest
README
Bundle for serializing BigNumber classes to/from string
representation using JmsSerializer.
Installation
-
Require the
prgtw/big-number-serializer-bundle
package in yourcomposer.json
and update your dependencies.composer require prgtw/big-number-serializer-bundle
-
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" }