Git Product home page Git Product logo

big-number-serializer-bundle's Introduction

BigNumberSerializerBundle

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"
}

big-number-serializer-bundle's People

Contributors

prgtw avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.