diff --git a/.github/workflows/php-tests.yml b/.github/workflows/php-tests.yml
index f1abe3c..1b888e8 100644
--- a/.github/workflows/php-tests.yml
+++ b/.github/workflows/php-tests.yml
@@ -43,7 +43,7 @@ jobs:
       run: composer run-script ci-test
 
     - name: Upload coverage report
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
         name: coverage-report
         path: coverage.xml
diff --git a/.gitignore b/.gitignore
index 783d717..847bd3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@ vendor/
 .idea/
 coverage.xml
 package.xml
+clover.xml
 coverage-html/
 .phpunit/
 /.php-cs-fixer.cache
diff --git a/README.md b/README.md
index 917badc..8bc6dbe 100644
--- a/README.md
+++ b/README.md
@@ -27,7 +27,7 @@ final readonly class UserData extends Data
     public function __construct(
         public string $firstName,
         #[Aliases('familyName')]
-        public stirng $lastName
+        public string $lastName
     ) {
         $this->fullName = "$this->firstName $this->lastName";
     }
@@ -67,10 +67,6 @@ This package was inspired from the [spatie/data-transfer-object](https://github.
 The main thing that I tried to focus on when creating this package is to make it outside of Laravel ecosystem, 
 meaning: no dependency on [illuminate/support](https://github.com/illuminate/support).
 
-**In no way** I am trying to compare this package with the original one,
-Clearly, the original package is more advanced and has more features than this one,
-and if you are using Laravel, I highly recommend using the original package instead of this one.
-
 ### Requirements
 
 - PHP 8.4 or higher
diff --git a/clover.xml b/clover.xml
deleted file mode 100644
index 26f192e..0000000
--- a/clover.xml
+++ /dev/null
@@ -1,1664 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<coverage generated="1735743024">
-  <project timestamp="1735743024">
-    <package name="Nuxtifyts\PhpDto\Attributes\Class">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Class/MapName.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Class\MapName" namespace="Nuxtifyts\PhpDto\Attributes\Class">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-        </class>
-        <line num="14" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="18" type="stmt" count="1"/>
-        <metrics loc="20" ncloc="17" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Class/WithNormalizer.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Class\WithNormalizer" namespace="Nuxtifyts\PhpDto\Attributes\Class">
-          <metrics complexity="2" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-        </class>
-        <line num="20" type="method" name="__construct" visibility="public" complexity="2" crap="2" count="3"/>
-        <line num="22" type="stmt" count="3"/>
-        <line num="24" type="stmt" count="3"/>
-        <line num="25" type="stmt" count="1"/>
-        <line num="28" type="stmt" count="2"/>
-        <metrics loc="31" ncloc="26" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Attributes\Property">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/Aliases.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\Aliases" namespace="Nuxtifyts\PhpDto\Attributes\Property">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-        </class>
-        <line num="13" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="17" type="stmt" count="1"/>
-        <metrics loc="20" ncloc="19" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/CipherTarget.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\CipherTarget" namespace="Nuxtifyts\PhpDto\Attributes\Property">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-        </class>
-        <line num="14" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="4"/>
-        <line num="19" type="stmt" count="4"/>
-        <metrics loc="21" ncloc="18" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/Computed.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\Computed" namespace="Nuxtifyts\PhpDto\Attributes\Property">
-          <metrics complexity="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-        </class>
-        <metrics loc="11" ncloc="11" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/DefaultsTo.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\DefaultsTo" namespace="Nuxtifyts\PhpDto\Attributes\Property">
-          <metrics complexity="4" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" elements="6" coveredelements="6"/>
-        </class>
-        <line num="25" type="method" name="__construct" visibility="public" complexity="4" crap="4" count="4"/>
-        <line num="28" type="stmt" count="4"/>
-        <line num="30" type="stmt" count="2"/>
-        <line num="32" type="stmt" count="2"/>
-        <line num="33" type="stmt" count="1"/>
-        <line num="36" type="stmt" count="1"/>
-        <metrics loc="41" ncloc="32" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" elements="6" coveredelements="6"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/Hidden.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\Hidden" namespace="Nuxtifyts\PhpDto\Attributes\Property">
-          <metrics complexity="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-        </class>
-        <metrics loc="11" ncloc="11" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/WithRefiner.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\WithRefiner" namespace="Nuxtifyts\PhpDto\Attributes\Property">
-          <metrics complexity="2" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="4" coveredelements="4"/>
-        </class>
-        <line num="17" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="21" type="stmt" count="1"/>
-        <line num="24" type="method" name="getRefiner" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="26" type="stmt" count="1"/>
-        <metrics loc="29" ncloc="25" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="4" coveredelements="4"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Attributes\Property\Types">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/Types/ArrayOfBackedEnums.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\Types\ArrayOfBackedEnums" namespace="Nuxtifyts\PhpDto\Attributes\Property\Types">
-          <metrics complexity="7" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="17" coveredstatements="17" elements="18" coveredelements="18"/>
-        </class>
-        <line num="25" type="method" name="__construct" visibility="public" complexity="7" crap="7" count="7"/>
-        <line num="28" type="stmt" count="7"/>
-        <line num="30" type="stmt" count="7"/>
-        <line num="31" type="stmt" count="1"/>
-        <line num="32" type="stmt" count="1"/>
-        <line num="33" type="stmt" count="1"/>
-        <line num="35" type="stmt" count="6"/>
-        <line num="36" type="stmt" count="6"/>
-        <line num="37" type="stmt" count="2"/>
-        <line num="38" type="stmt" count="2"/>
-        <line num="39" type="stmt" count="2"/>
-        <line num="45" type="stmt" count="4"/>
-        <line num="47" type="stmt" count="4"/>
-        <line num="48" type="stmt" count="1"/>
-        <line num="49" type="stmt" count="1"/>
-        <line num="50" type="stmt" count="1"/>
-        <line num="53" type="stmt" count="3"/>
-        <line num="57" type="stmt" count="3"/>
-        <metrics loc="60" ncloc="51" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="17" coveredstatements="17" elements="18" coveredelements="18"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/Types/ArrayOfData.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\Types\ArrayOfData" namespace="Nuxtifyts\PhpDto\Attributes\Property\Types">
-          <metrics complexity="8" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="21" coveredstatements="21" elements="22" coveredelements="22"/>
-        </class>
-        <line num="27" type="method" name="__construct" visibility="public" complexity="8" crap="8" count="6"/>
-        <line num="31" type="stmt" count="6"/>
-        <line num="33" type="stmt" count="6"/>
-        <line num="34" type="stmt" count="1"/>
-        <line num="35" type="stmt" count="1"/>
-        <line num="36" type="stmt" count="1"/>
-        <line num="38" type="stmt" count="5"/>
-        <line num="39" type="stmt" count="5"/>
-        <line num="40" type="stmt" count="1"/>
-        <line num="41" type="stmt" count="1"/>
-        <line num="42" type="stmt" count="1"/>
-        <line num="48" type="stmt" count="4"/>
-        <line num="50" type="stmt" count="4"/>
-        <line num="51" type="stmt" count="1"/>
-        <line num="52" type="stmt" count="1"/>
-        <line num="53" type="stmt" count="1"/>
-        <line num="56" type="stmt" count="3"/>
-        <line num="60" type="stmt" count="3"/>
-        <line num="61" type="stmt" count="3"/>
-        <line num="62" type="stmt" count="3"/>
-        <line num="63" type="stmt" count="3"/>
-        <line num="64" type="stmt" count="3"/>
-        <metrics loc="68" ncloc="59" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="21" coveredstatements="21" elements="22" coveredelements="22"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/Types/ArrayOfDateTimes.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\Types\ArrayOfDateTimes" namespace="Nuxtifyts\PhpDto\Attributes\Property\Types">
-          <metrics complexity="9" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="21" coveredstatements="21" elements="22" coveredelements="22"/>
-        </class>
-        <line num="28" type="method" name="__construct" visibility="public" complexity="9" crap="9" count="6"/>
-        <line num="32" type="stmt" count="6"/>
-        <line num="34" type="stmt" count="6"/>
-        <line num="35" type="stmt" count="1"/>
-        <line num="36" type="stmt" count="1"/>
-        <line num="37" type="stmt" count="1"/>
-        <line num="39" type="stmt" count="5"/>
-        <line num="40" type="stmt" count="5"/>
-        <line num="41" type="stmt" count="1"/>
-        <line num="42" type="stmt" count="1"/>
-        <line num="43" type="stmt" count="1"/>
-        <line num="49" type="stmt" count="4"/>
-        <line num="51" type="stmt" count="4"/>
-        <line num="52" type="stmt" count="1"/>
-        <line num="53" type="stmt" count="1"/>
-        <line num="54" type="stmt" count="1"/>
-        <line num="57" type="stmt" count="3"/>
-        <line num="61" type="stmt" count="3"/>
-        <line num="62" type="stmt" count="3"/>
-        <line num="63" type="stmt" count="3"/>
-        <line num="64" type="stmt" count="3"/>
-        <line num="65" type="stmt" count="3"/>
-        <metrics loc="69" ncloc="60" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="21" coveredstatements="21" elements="22" coveredelements="22"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Property/Types/ArrayOfScalarTypes.php">
-        <class name="Nuxtifyts\PhpDto\Attributes\Property\Types\ArrayOfScalarTypes" namespace="Nuxtifyts\PhpDto\Attributes\Property\Types">
-          <metrics complexity="3" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" elements="10" coveredelements="10"/>
-        </class>
-        <line num="18" type="method" name="__construct" visibility="public" complexity="3" crap="3" count="7"/>
-        <line num="21" type="stmt" count="7"/>
-        <line num="24" type="stmt" count="7"/>
-        <line num="25" type="stmt" count="7"/>
-        <line num="26" type="stmt" count="7"/>
-        <line num="27" type="stmt" count="7"/>
-        <line num="29" type="stmt" count="1"/>
-        <line num="30" type="stmt" count="1"/>
-        <line num="31" type="stmt" count="1"/>
-        <line num="34" type="stmt" count="6"/>
-        <metrics loc="37" ncloc="33" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" elements="10" coveredelements="10"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Concerns">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Concerns/BaseData.php">
-        <class name="Nuxtifyts\PhpDto\Concerns\BaseData" namespace="Nuxtifyts\PhpDto\Concerns">
-          <metrics complexity="20" methods="7" coveredmethods="7" conditionals="0" coveredconditionals="0" statements="53" coveredstatements="53" elements="60" coveredelements="60"/>
-        </class>
-        <line num="22" type="method" name="create" visibility="public" complexity="4" crap="4" count="2"/>
-        <line num="26" type="stmt" count="2"/>
-        <line num="28" type="stmt" count="2"/>
-        <line num="29" type="stmt" count="2"/>
-        <line num="31" type="stmt" count="2"/>
-        <line num="32" type="stmt" count="1"/>
-        <line num="35" type="stmt" count="1"/>
-        <line num="36" type="stmt" count="1"/>
-        <line num="37" type="stmt" count="1"/>
-        <line num="38" type="stmt" count="1"/>
-        <line num="39" type="stmt" count="1"/>
-        <line num="40" type="stmt" count="1"/>
-        <line num="42" type="stmt" count="1"/>
-        <line num="43" type="stmt" count="1"/>
-        <line num="44" type="stmt" count="1"/>
-        <line num="51" type="method" name="from" visibility="public" complexity="4" crap="4" count="29"/>
-        <line num="55" type="stmt" count="29"/>
-        <line num="57" type="stmt" count="29"/>
-        <line num="59" type="stmt" count="29"/>
-        <line num="60" type="stmt" count="1"/>
-        <line num="63" type="stmt" count="28"/>
-        <line num="64" type="stmt" count="28"/>
-        <line num="65" type="stmt" count="28"/>
-        <line num="66" type="stmt" count="28"/>
-        <line num="67" type="stmt" count="28"/>
-        <line num="68" type="stmt" count="28"/>
-        <line num="70" type="stmt" count="28"/>
-        <line num="71" type="stmt" count="5"/>
-        <line num="72" type="stmt" count="27"/>
-        <line num="73" type="stmt" count="3"/>
-        <line num="74" type="stmt" count="3"/>
-        <line num="84" type="method" name="instanceWithoutConstructorFrom" visibility="protected" complexity="2" crap="2" count="24"/>
-        <line num="86" type="stmt" count="24"/>
-        <line num="88" type="stmt" count="24"/>
-        <line num="89" type="stmt" count="24"/>
-        <line num="91" type="stmt" count="24"/>
-        <line num="94" type="stmt" count="24"/>
-        <line num="103" type="method" name="instanceWithConstructorCallFrom" visibility="protected" complexity="3" crap="3" count="6"/>
-        <line num="106" type="stmt" count="6"/>
-        <line num="108" type="stmt" count="6"/>
-        <line num="109" type="stmt" count="6"/>
-        <line num="111" type="stmt" count="6"/>
-        <line num="112" type="stmt" count="1"/>
-        <line num="115" type="stmt" count="6"/>
-        <line num="118" type="stmt" count="5"/>
-        <line num="126" type="method" name="jsonSerialize" visibility="public" complexity="5" crap="5" count="29"/>
-        <line num="129" type="stmt" count="29"/>
-        <line num="131" type="stmt" count="29"/>
-        <line num="132" type="stmt" count="29"/>
-        <line num="133" type="stmt" count="29"/>
-        <line num="134" type="stmt" count="4"/>
-        <line num="137" type="stmt" count="29"/>
-        <line num="139" type="stmt" count="29"/>
-        <line num="142" type="stmt" count="28"/>
-        <line num="143" type="stmt" count="1"/>
-        <line num="144" type="stmt" count="1"/>
-        <line num="151" type="method" name="toArray" visibility="public" complexity="1" crap="1" count="4"/>
-        <line num="153" type="stmt" count="4"/>
-        <line num="156" type="method" name="toJson" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="158" type="stmt" count="1"/>
-        <metrics loc="161" ncloc="132" classes="1" methods="7" coveredmethods="7" conditionals="0" coveredconditionals="0" statements="53" coveredstatements="53" elements="60" coveredelements="60"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Concerns/CloneableData.php">
-        <class name="Nuxtifyts\PhpDto\Concerns\CloneableData" namespace="Nuxtifyts\PhpDto\Concerns">
-          <metrics complexity="13" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="28" coveredstatements="28" elements="31" coveredelements="31"/>
-        </class>
-        <line num="18" type="method" name="with" visibility="public" complexity="6" crap="6" count="11"/>
-        <line num="21" type="stmt" count="11"/>
-        <line num="22" type="stmt" count="1"/>
-        <line num="26" type="stmt" count="10"/>
-        <line num="28" type="stmt" count="10"/>
-        <line num="29" type="stmt" count="3"/>
-        <line num="31" type="stmt" count="10"/>
-        <line num="32" type="stmt" count="1"/>
-        <line num="35" type="stmt" count="9"/>
-        <line num="36" type="stmt" count="7"/>
-        <line num="37" type="stmt" count="7"/>
-        <line num="38" type="stmt" count="4"/>
-        <line num="39" type="stmt" count="4"/>
-        <line num="49" type="method" name="cloneInstanceWithConstructorCall" visibility="protected" complexity="4" crap="4" count="7"/>
-        <line num="52" type="stmt" count="7"/>
-        <line num="54" type="stmt" count="7"/>
-        <line num="55" type="stmt" count="7"/>
-        <line num="57" type="stmt" count="7"/>
-        <line num="58" type="stmt" count="1"/>
-        <line num="61" type="stmt" count="7"/>
-        <line num="62" type="stmt" count="6"/>
-        <line num="63" type="stmt" count="5"/>
-        <line num="66" type="stmt" count="6"/>
-        <line num="75" type="method" name="cloneInstanceWithoutConstructorCall" visibility="protected" complexity="3" crap="3" count="2"/>
-        <line num="77" type="stmt" count="2"/>
-        <line num="79" type="stmt" count="2"/>
-        <line num="80" type="stmt" count="2"/>
-        <line num="81" type="stmt" count="2"/>
-        <line num="82" type="stmt" count="2"/>
-        <line num="83" type="stmt" count="2"/>
-        <line num="86" type="stmt" count="2"/>
-        <metrics loc="89" ncloc="72" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="28" coveredstatements="28" elements="31" coveredelements="31"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Concerns/EmptyData.php">
-        <class name="Nuxtifyts\PhpDto\Concerns\EmptyData" namespace="Nuxtifyts\PhpDto\Concerns">
-          <metrics complexity="2" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-        </class>
-        <line num="15" type="method" name="empty" visibility="public" complexity="2" crap="2" count="10"/>
-        <line num="19" type="stmt" count="10"/>
-        <line num="21" type="stmt" count="10"/>
-        <line num="22" type="stmt" count="1"/>
-        <line num="23" type="stmt" count="1"/>
-        <metrics loc="27" ncloc="23" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-      </file>
-    </package>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/Configuration/Configuration.php">
-      <metrics loc="19" ncloc="14" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <package name="Nuxtifyts\PhpDto\Configuration">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Configuration/DataConfiguration.php">
-        <class name="Nuxtifyts\PhpDto\Configuration\DataConfiguration" namespace="Nuxtifyts\PhpDto\Configuration">
-          <metrics complexity="4" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" elements="15" coveredelements="15"/>
-        </class>
-        <line num="12" type="method" name="__construct" visibility="protected" complexity="1" crap="1" count="2"/>
-        <line num="16" type="stmt" count="2"/>
-        <line num="23" type="method" name="getInstance" visibility="public" complexity="3" crap="3" count="12"/>
-        <line num="27" type="stmt" count="12"/>
-        <line num="28" type="stmt" count="10"/>
-        <line num="31" type="stmt" count="4"/>
-        <line num="32" type="stmt" count="4"/>
-        <line num="33" type="stmt" count="4"/>
-        <line num="34" type="stmt" count="4"/>
-        <line num="35" type="stmt" count="4"/>
-        <line num="36" type="stmt" count="4"/>
-        <line num="37" type="stmt" count="4"/>
-        <line num="38" type="stmt" count="4"/>
-        <line num="39" type="stmt" count="4"/>
-        <line num="40" type="stmt" count="4"/>
-        <metrics loc="43" ncloc="38" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" elements="15" coveredelements="15"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Configuration/NormalizersConfiguration.php">
-        <class name="Nuxtifyts\PhpDto\Configuration\NormalizersConfiguration" namespace="Nuxtifyts\PhpDto\Configuration">
-          <metrics complexity="6" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="14" coveredstatements="14" elements="16" coveredelements="16"/>
-        </class>
-        <line num="20" type="method" name="__construct" visibility="protected" complexity="1" crap="1" count="3"/>
-        <line num="23" type="stmt" count="3"/>
-        <line num="30" type="method" name="getInstance" visibility="public" complexity="5" crap="5" count="4"/>
-        <line num="34" type="stmt" count="4"/>
-        <line num="35" type="stmt" count="1"/>
-        <line num="38" type="stmt" count="4"/>
-        <line num="39" type="stmt" count="4"/>
-        <line num="40" type="stmt" count="4"/>
-        <line num="41" type="stmt" count="4"/>
-        <line num="42" type="stmt" count="4"/>
-        <line num="46" type="stmt" count="4"/>
-        <line num="47" type="stmt" count="4"/>
-        <line num="49" type="stmt" count="1"/>
-        <line num="53" type="stmt" count="3"/>
-        <line num="54" type="stmt" count="3"/>
-        <line num="55" type="stmt" count="3"/>
-        <metrics loc="58" ncloc="49" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="14" coveredstatements="14" elements="16" coveredelements="16"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Configuration/SerializersConfiguration.php">
-        <class name="Nuxtifyts\PhpDto\Configuration\SerializersConfiguration" namespace="Nuxtifyts\PhpDto\Configuration">
-          <metrics complexity="6" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="15" coveredstatements="15" elements="17" coveredelements="17"/>
-        </class>
-        <line num="21" type="method" name="__construct" visibility="protected" complexity="1" crap="1" count="2"/>
-        <line num="24" type="stmt" count="2"/>
-        <line num="31" type="method" name="getInstance" visibility="public" complexity="5" crap="5" count="3"/>
-        <line num="35" type="stmt" count="3"/>
-        <line num="36" type="stmt" count="1"/>
-        <line num="39" type="stmt" count="3"/>
-        <line num="40" type="stmt" count="3"/>
-        <line num="41" type="stmt" count="3"/>
-        <line num="42" type="stmt" count="3"/>
-        <line num="43" type="stmt" count="3"/>
-        <line num="44" type="stmt" count="3"/>
-        <line num="48" type="stmt" count="3"/>
-        <line num="49" type="stmt" count="3"/>
-        <line num="51" type="stmt" count="1"/>
-        <line num="55" type="stmt" count="2"/>
-        <line num="56" type="stmt" count="2"/>
-        <line num="57" type="stmt" count="2"/>
-        <metrics loc="60" ncloc="51" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="15" coveredstatements="15" elements="17" coveredelements="17"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Contexts">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Contexts/ClassContext.php">
-        <class name="Nuxtifyts\PhpDto\Contexts\ClassContext" namespace="Nuxtifyts\PhpDto\Contexts">
-          <metrics complexity="16" methods="8" coveredmethods="8" conditionals="0" coveredconditionals="0" statements="38" coveredstatements="38" elements="46" coveredelements="46"/>
-        </class>
-        <line num="48" type="method" name="__construct" visibility="private" complexity="1" crap="1" count="11"/>
-        <line num="51" type="stmt" count="11"/>
-        <line num="52" type="stmt" count="11"/>
-        <line num="53" type="stmt" count="11"/>
-        <line num="54" type="stmt" count="11"/>
-        <line num="55" type="stmt" count="11"/>
-        <line num="56" type="stmt" count="11"/>
-        <line num="74" type="method" name="getInstance" visibility="public" complexity="3" crap="3" count="27"/>
-        <line num="76" type="stmt" count="27"/>
-        <line num="78" type="stmt" count="27"/>
-        <line num="79" type="stmt" count="20"/>
-        <line num="82" type="stmt" count="11"/>
-        <line num="83" type="stmt" count="11"/>
-        <line num="86" type="stmt" count="11"/>
-        <line num="87" type="stmt" count="11"/>
-        <line num="93" type="method" name="getKey" visibility="private" complexity="2" crap="2" count="27"/>
-        <line num="95" type="stmt" count="27"/>
-        <line num="105" type="method" name="getPropertyContexts" visibility="private" complexity="2" crap="2" count="11"/>
-        <line num="107" type="stmt" count="11"/>
-        <line num="109" type="stmt" count="11"/>
-        <line num="110" type="stmt" count="10"/>
-        <line num="113" type="stmt" count="11"/>
-        <line num="116" type="method" name="syncClassAttributes" visibility="private" complexity="3" crap="3" count="11"/>
-        <line num="118" type="stmt" count="11"/>
-        <line num="120" type="stmt" count="1"/>
-        <line num="121" type="stmt" count="1"/>
-        <line num="122" type="stmt" count="1"/>
-        <line num="123" type="stmt" count="1"/>
-        <line num="126" type="stmt" count="11"/>
-        <line num="128" type="stmt" count="1"/>
-        <line num="130" type="stmt" count="1"/>
-        <line num="131" type="stmt" count="1"/>
-        <line num="132" type="stmt" count="1"/>
-        <line num="133" type="stmt" count="1"/>
-        <line num="142" type="method" name="newInstanceWithoutConstructor" visibility="public" complexity="1" crap="1" count="10"/>
-        <line num="144" type="stmt" count="10"/>
-        <line num="152" type="method" name="newInstanceWithConstructorCall" visibility="public" complexity="1" crap="1" count="14"/>
-        <line num="154" type="stmt" count="14"/>
-        <line num="164" type="method" name="emptyValue" visibility="public" complexity="3" crap="3" count="10"/>
-        <line num="167" type="stmt" count="10"/>
-        <line num="169" type="stmt" count="10"/>
-        <line num="170" type="stmt" count="10"/>
-        <line num="172" type="stmt" count="10"/>
-        <line num="173" type="stmt" count="1"/>
-        <line num="176" type="stmt" count="9"/>
-        <line num="179" type="stmt" count="9"/>
-        <metrics loc="182" ncloc="127" classes="1" methods="8" coveredmethods="8" conditionals="0" coveredconditionals="0" statements="38" coveredstatements="38" elements="46" coveredelements="46"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Contexts/PropertyContext.php">
-        <class name="Nuxtifyts\PhpDto\Contexts\PropertyContext" namespace="Nuxtifyts\PhpDto\Contexts">
-          <metrics complexity="37" methods="11" coveredmethods="9" conditionals="0" coveredconditionals="0" statements="89" coveredstatements="83" elements="100" coveredelements="92"/>
-        </class>
-        <line num="67" type="method" name="__construct" visibility="private" complexity="1" crap="1" count="61"/>
-        <line num="70" type="stmt" count="61"/>
-        <line num="71" type="stmt" count="60"/>
-        <line num="96" type="method" name="getInstance" visibility="public" complexity="1" crap="1" count="78"/>
-        <line num="98" type="stmt" count="78"/>
-        <line num="99" type="stmt" count="78"/>
-        <line num="102" type="method" name="getKey" visibility="private" complexity="1" crap="1" count="78"/>
-        <line num="104" type="stmt" count="78"/>
-        <line num="107" type="method" name="syncPropertyAttributes" visibility="private" complexity="6" crap="6" count="60"/>
-        <line num="109" type="stmt" count="60"/>
-        <line num="110" type="stmt" count="60"/>
-        <line num="112" type="stmt" count="60"/>
-        <line num="114" type="stmt" count="1"/>
-        <line num="117" type="stmt" count="60"/>
-        <line num="119" type="stmt" count="1"/>
-        <line num="122" type="stmt" count="60"/>
-        <line num="124" type="stmt" count="4"/>
-        <line num="126" type="stmt" count="4"/>
-        <line num="127" type="stmt" count="4"/>
-        <line num="128" type="stmt" count="4"/>
-        <line num="129" type="stmt" count="4"/>
-        <line num="130" type="stmt" count="4"/>
-        <line num="133" type="stmt" count="60"/>
-        <line num="135" type="stmt" count="3"/>
-        <line num="137" type="stmt" count="3"/>
-        <line num="138" type="stmt" count="3"/>
-        <line num="139" type="stmt" count="3"/>
-        <line num="140" type="stmt" count="3"/>
-        <line num="144" type="method" name="getValue" visibility="public" complexity="1" crap="1" count="34"/>
-        <line num="146" type="stmt" count="34"/>
-        <line num="152" type="method" name="getFilteredTypeContexts" visibility="public" complexity="1" crap="1" count="36"/>
-        <line num="154" type="stmt" count="36"/>
-        <line num="155" type="stmt" count="36"/>
-        <line num="156" type="stmt" count="36"/>
-        <line num="157" type="stmt" count="36"/>
-        <line num="158" type="stmt" count="36"/>
-        <line num="159" type="stmt" count="36"/>
-        <line num="160" type="stmt" count="36"/>
-        <line num="166" type="method" name="getFilteredSubTypeContexts" visibility="public" complexity="1" crap="1" count="14"/>
-        <line num="168" type="stmt" count="14"/>
-        <line num="169" type="stmt" count="14"/>
-        <line num="170" type="stmt" count="14"/>
-        <line num="171" type="stmt" count="14"/>
-        <line num="172" type="stmt" count="14"/>
-        <line num="173" type="stmt" count="14"/>
-        <line num="174" type="stmt" count="14"/>
-        <line num="183" type="method" name="resolveSerializers" visibility="protected" complexity="1" crap="1" count="12"/>
-        <line num="185" type="stmt" count="12"/>
-        <line num="195" type="method" name="deserializeFrom" visibility="public" complexity="3" crap="3" count="17"/>
-        <line num="197" type="stmt" count="17"/>
-        <line num="199" type="stmt" count="17"/>
-        <line num="200" type="stmt" count="1"/>
-        <line num="204" type="stmt" count="1"/>
-        <line num="212" type="method" name="serializeFrom" visibility="public" complexity="6" crap="6.47" count="16"/>
-        <line num="215" type="stmt" count="16"/>
-        <line num="217" type="stmt" count="16"/>
-        <line num="218" type="stmt" count="0"/>
-        <line num="222" type="stmt" count="16"/>
-        <line num="223" type="stmt" count="0"/>
-        <line num="226" type="stmt" count="16"/>
-        <line num="227" type="stmt" count="3"/>
-        <line num="228" type="stmt" count="3"/>
-        <line num="229" type="stmt" count="3"/>
-        <line num="230" type="stmt" count="3"/>
-        <line num="231" type="stmt" count="3"/>
-        <line num="232" type="stmt" count="3"/>
-        <line num="233" type="stmt" count="3"/>
-        <line num="234" type="stmt" count="3"/>
-        <line num="237" type="stmt" count="14"/>
-        <line num="238" type="stmt" count="0"/>
-        <line num="239" type="stmt" count="0"/>
-        <line num="248" type="method" name="emptyValue" visibility="public" complexity="15" crap="15.08" count="9"/>
-        <line num="250" type="stmt" count="9"/>
-        <line num="251" type="stmt" count="5"/>
-        <line num="254" type="stmt" count="8"/>
-        <line num="255" type="stmt" count="0"/>
-        <line num="259" type="stmt" count="8"/>
-        <line num="260" type="stmt" count="4"/>
-        <line num="262" type="stmt" count="8"/>
-        <line num="263" type="stmt" count="1"/>
-        <line num="265" type="stmt" count="8"/>
-        <line num="266" type="stmt" count="1"/>
-        <line num="268" type="stmt" count="8"/>
-        <line num="269" type="stmt" count="1"/>
-        <line num="271" type="stmt" count="7"/>
-        <line num="272" type="stmt" count="2"/>
-        <line num="274" type="stmt" count="5"/>
-        <line num="276" type="stmt" count="1"/>
-        <line num="278" type="stmt" count="1"/>
-        <line num="279" type="stmt" count="0"/>
-        <line num="280" type="stmt" count="1"/>
-        <line num="282" type="stmt" count="4"/>
-        <line num="284" type="stmt" count="2"/>
-        <line num="286" type="stmt" count="2"/>
-        <line num="287" type="stmt" count="2"/>
-        <line num="288" type="stmt" count="2"/>
-        <line num="292" type="stmt" count="2"/>
-        <line num="294" type="stmt" count="2"/>
-        <line num="295" type="stmt" count="2"/>
-        <line num="296" type="stmt" count="2"/>
-        <metrics loc="300" ncloc="247" classes="1" methods="11" coveredmethods="9" conditionals="0" coveredconditionals="0" statements="89" coveredstatements="83" elements="100" coveredelements="92"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Contexts/TypeContext.php">
-        <class name="Nuxtifyts\PhpDto\Contexts\TypeContext" namespace="Nuxtifyts\PhpDto\Contexts">
-          <metrics complexity="31" methods="7" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="73" coveredstatements="65" elements="80" coveredelements="69"/>
-        </class>
-        <line num="56" type="method" name="__construct" visibility="protected" complexity="1" crap="1" count="36"/>
-        <line num="61" type="stmt" count="36"/>
-        <line num="68" type="method" name="getInstances" visibility="public" complexity="12" crap="12" count="37"/>
-        <line num="70" type="stmt" count="37"/>
-        <line num="71" type="stmt" count="37"/>
-        <line num="73" type="stmt" count="37"/>
-        <line num="75" type="stmt" count="37"/>
-        <line num="76" type="stmt" count="1"/>
-        <line num="77" type="stmt" count="1"/>
-        <line num="78" type="stmt" count="36"/>
-        <line num="79" type="stmt" count="2"/>
-        <line num="80" type="stmt" count="2"/>
-        <line num="81" type="stmt" count="34"/>
-        <line num="82" type="stmt" count="1"/>
-        <line num="83" type="stmt" count="1"/>
-        <line num="84" type="stmt" count="33"/>
-        <line num="85" type="stmt" count="4"/>
-        <line num="86" type="stmt" count="4"/>
-        <line num="87" type="stmt" count="30"/>
-        <line num="88" type="stmt" count="0"/>
-        <line num="89" type="stmt" count="30"/>
-        <line num="90" type="stmt" count="2"/>
-        <line num="91" type="stmt" count="2"/>
-        <line num="92" type="stmt" count="2"/>
-        <line num="93" type="stmt" count="2"/>
-        <line num="94" type="stmt" count="2"/>
-        <line num="95" type="stmt" count="29"/>
-        <line num="96" type="stmt" count="5"/>
-        <line num="97" type="stmt" count="5"/>
-        <line num="98" type="stmt" count="5"/>
-        <line num="99" type="stmt" count="5"/>
-        <line num="100" type="stmt" count="5"/>
-        <line num="101" type="stmt" count="24"/>
-        <line num="102" type="stmt" count="1"/>
-        <line num="103" type="stmt" count="1"/>
-        <line num="104" type="stmt" count="1"/>
-        <line num="105" type="stmt" count="1"/>
-        <line num="106" type="stmt" count="1"/>
-        <line num="107" type="stmt" count="23"/>
-        <line num="108" type="stmt" count="22"/>
-        <line num="109" type="stmt" count="22"/>
-        <line num="110" type="stmt" count="22"/>
-        <line num="111" type="stmt" count="22"/>
-        <line num="112" type="stmt" count="22"/>
-        <line num="114" type="stmt" count="1"/>
-        <line num="118" type="stmt" count="36"/>
-        <line num="124" type="method" name="resolvesReflectionEnum" visibility="private" complexity="3" crap="3" count="30"/>
-        <line num="126" type="stmt" count="30"/>
-        <line num="131" type="stmt" count="2"/>
-        <line num="133" type="stmt" count="2"/>
-        <line num="134" type="stmt" count="2"/>
-        <line num="136" type="stmt" count="2"/>
-        <line num="140" type="stmt" count="29"/>
-        <line num="146" type="method" name="resolvesDateTime" visibility="private" complexity="5" crap="5" count="29"/>
-        <line num="149" type="stmt" count="29"/>
-        <line num="154" type="stmt" count="6"/>
-        <line num="156" type="stmt" count="6"/>
-        <line num="157" type="stmt" count="5"/>
-        <line num="159" type="stmt" count="29"/>
-        <line num="167" type="stmt" count="24"/>
-        <line num="173" type="method" name="resolvesData" visibility="private" complexity="4" crap="4.07" count="24"/>
-        <line num="176" type="stmt" count="24"/>
-        <line num="181" type="stmt" count="1"/>
-        <line num="183" type="stmt" count="1"/>
-        <line num="184" type="stmt" count="24"/>
-        <line num="187" type="stmt" count="0"/>
-        <line num="190" type="stmt" count="23"/>
-        <line num="199" type="method" name="getPropertyStringTypes" visibility="private" complexity="5" crap="10.40" count="37"/>
-        <line num="202" type="stmt" count="37"/>
-        <line num="203" type="stmt" count="37"/>
-        <line num="204" type="stmt" count="37"/>
-        <line num="205" type="stmt" count="0"/>
-        <line num="206" type="stmt" count="0"/>
-        <line num="207" type="stmt" count="0"/>
-        <line num="208" type="stmt" count="0"/>
-        <line num="209" type="stmt" count="0"/>
-        <line num="210" type="stmt" count="0"/>
-        <line num="211" type="stmt" count="37"/>
-        <line num="221" type="method" name="resolveSerializers" visibility="protected" complexity="1" crap="1" count="8"/>
-        <line num="223" type="stmt" count="8"/>
-        <metrics loc="226" ncloc="175" classes="1" methods="7" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="73" coveredstatements="65" elements="80" coveredelements="69"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Contexts\ClassContext">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Contexts/ClassContext/NameMapperConfig.php">
-        <class name="Nuxtifyts\PhpDto\Contexts\ClassContext\NameMapperConfig" namespace="Nuxtifyts\PhpDto\Contexts\ClassContext">
-          <metrics complexity="6" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="7" coveredstatements="7" elements="9" coveredelements="9"/>
-        </class>
-        <line num="16" type="method" name="__construct" visibility="public" complexity="2" crap="2" count="1"/>
-        <line num="20" type="stmt" count="1"/>
-        <line num="23" type="method" name="transform" visibility="public" complexity="4" crap="4" count="5"/>
-        <line num="25" type="stmt" count="5"/>
-        <line num="26" type="stmt" count="1"/>
-        <line num="29" type="stmt" count="4"/>
-        <line num="30" type="stmt" count="4"/>
-        <line num="31" type="stmt" count="4"/>
-        <line num="35" type="stmt" count="1"/>
-        <metrics loc="38" ncloc="34" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="7" coveredstatements="7" elements="9" coveredelements="9"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Contexts\Concerns">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Contexts/Concerns/HasTypes.php">
-        <class name="Nuxtifyts\PhpDto\Contexts\Concerns\HasTypes" namespace="Nuxtifyts\PhpDto\Contexts\Concerns">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="3" coveredelements="3"/>
-        </class>
-        <line num="28" type="method" name="syncTypesFromReflectionProperty" visibility="protected" complexity="1" crap="1" count="61"/>
-        <line num="30" type="stmt" count="61"/>
-        <line num="31" type="stmt" count="61"/>
-        <metrics loc="34" ncloc="29" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="3" coveredelements="3"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Contexts\TypeContext">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Contexts/TypeContext/ResolvesArraySubContexts.php">
-        <class name="Nuxtifyts\PhpDto\Contexts\TypeContext\ResolvesArraySubContexts" namespace="Nuxtifyts\PhpDto\Contexts\TypeContext">
-          <metrics complexity="19" methods="6" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="51" coveredstatements="44" elements="57" coveredelements="47"/>
-        </class>
-        <line num="22" type="method" name="resolveSubContextsForArray" visibility="protected" complexity="8" crap="8.02" count="22"/>
-        <line num="24" type="stmt" count="22"/>
-        <line num="26" type="stmt" count="22"/>
-        <line num="27" type="stmt" count="22"/>
-        <line num="28" type="stmt" count="22"/>
-        <line num="30" type="stmt" count="22"/>
-        <line num="31" type="stmt" count="22"/>
-        <line num="32" type="stmt" count="22"/>
-        <line num="33" type="stmt" count="22"/>
-        <line num="34" type="stmt" count="13"/>
-        <line num="35" type="stmt" count="8"/>
-        <line num="36" type="stmt" count="4"/>
-        <line num="37" type="stmt" count="0"/>
-        <line num="38" type="stmt" count="22"/>
-        <line num="39" type="stmt" count="22"/>
-        <line num="43" type="stmt" count="22"/>
-        <line num="49" type="method" name="resolveSubContextsForArrayOfScalarTypes" visibility="private" complexity="3" crap="3.47" count="10"/>
-        <line num="51" type="stmt" count="10"/>
-        <line num="53" type="stmt" count="10"/>
-        <line num="54" type="stmt" count="10"/>
-        <line num="55" type="stmt" count="0"/>
-        <line num="56" type="stmt" count="0"/>
-        <line num="57" type="stmt" count="0"/>
-        <line num="60" type="stmt" count="10"/>
-        <line num="63" type="stmt" count="10"/>
-        <line num="69" type="method" name="resolveSubContextsForArrayOfBackedEnums" visibility="private" complexity="3" crap="3.24" count="5"/>
-        <line num="71" type="stmt" count="5"/>
-        <line num="73" type="stmt" count="5"/>
-        <line num="74" type="stmt" count="5"/>
-        <line num="75" type="stmt" count="5"/>
-        <line num="77" type="stmt" count="5"/>
-        <line num="78" type="stmt" count="0"/>
-        <line num="79" type="stmt" count="0"/>
-        <line num="80" type="stmt" count="0"/>
-        <line num="83" type="stmt" count="5"/>
-        <line num="86" type="stmt" count="5"/>
-        <line num="90" type="method" name="resolveSubContextsForArrayOfDateTimes" visibility="private" complexity="2" crap="2" count="4"/>
-        <line num="92" type="stmt" count="4"/>
-        <line num="94" type="stmt" count="4"/>
-        <line num="95" type="stmt" count="4"/>
-        <line num="96" type="stmt" count="4"/>
-        <line num="98" type="stmt" count="4"/>
-        <line num="101" type="stmt" count="4"/>
-        <line num="105" type="method" name="resolveSubContextsForArrayOfData" visibility="private" complexity="2" crap="2" count="4"/>
-        <line num="107" type="stmt" count="4"/>
-        <line num="109" type="stmt" count="4"/>
-        <line num="110" type="stmt" count="4"/>
-        <line num="111" type="stmt" count="4"/>
-        <line num="113" type="stmt" count="4"/>
-        <line num="116" type="stmt" count="4"/>
-        <line num="122" type="method" name="arrayTypeAttributeClasses" visibility="private" complexity="1" crap="1" count="22"/>
-        <line num="124" type="stmt" count="22"/>
-        <line num="125" type="stmt" count="22"/>
-        <line num="126" type="stmt" count="22"/>
-        <line num="127" type="stmt" count="22"/>
-        <line num="128" type="stmt" count="22"/>
-        <line num="129" type="stmt" count="22"/>
-        <metrics loc="132" ncloc="115" classes="1" methods="6" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="51" coveredstatements="44" elements="57" coveredelements="47"/>
-      </file>
-    </package>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/Contracts/BaseData.php">
-      <metrics loc="43" ncloc="22" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/Contracts/CloneableData.php">
-      <metrics loc="14" ncloc="11" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/Contracts/EmptyData.php">
-      <metrics loc="14" ncloc="11" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <package name="Nuxtifyts\PhpDto">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Data.php">
-        <class name="Nuxtifyts\PhpDto\Data" namespace="Nuxtifyts\PhpDto">
-          <metrics complexity="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-        </class>
-        <metrics loc="21" ncloc="21" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\DataCiphers">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/DataCiphers/CipherConfig.php">
-        <class name="Nuxtifyts\PhpDto\DataCiphers\CipherConfig" namespace="Nuxtifyts\PhpDto\DataCiphers">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-        </class>
-        <line num="10" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="4"/>
-        <line num="15" type="stmt" count="4"/>
-        <metrics loc="17" ncloc="14" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/DataCiphers/DefaultDataCipher.php">
-        <class name="Nuxtifyts\PhpDto\DataCiphers\DefaultDataCipher" namespace="Nuxtifyts\PhpDto\DataCiphers">
-          <metrics complexity="13" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="43" coveredstatements="38" elements="46" coveredelements="38"/>
-        </class>
-        <line num="14" type="method" name="cipher" visibility="public" complexity="4" crap="4.03" count="3"/>
-        <line num="19" type="stmt" count="3"/>
-        <line num="20" type="stmt" count="3"/>
-        <line num="22" type="stmt" count="3"/>
-        <line num="23" type="stmt" count="0"/>
-        <line num="26" type="stmt" count="3"/>
-        <line num="28" type="stmt" count="3"/>
-        <line num="29" type="stmt" count="3"/>
-        <line num="30" type="stmt" count="3"/>
-        <line num="31" type="stmt" count="3"/>
-        <line num="32" type="stmt" count="3"/>
-        <line num="33" type="stmt" count="3"/>
-        <line num="34" type="stmt" count="3"/>
-        <line num="36" type="stmt" count="3"/>
-        <line num="37" type="stmt" count="0"/>
-        <line num="40" type="stmt" count="3"/>
-        <line num="41" type="stmt" count="3"/>
-        <line num="42" type="stmt" count="3"/>
-        <line num="48" type="method" name="decipher" visibility="public" complexity="6" crap="6.04" count="4"/>
-        <line num="53" type="stmt" count="4"/>
-        <line num="55" type="stmt" count="4"/>
-        <line num="57" type="stmt" count="4"/>
-        <line num="58" type="stmt" count="0"/>
-        <line num="61" type="stmt" count="4"/>
-        <line num="62" type="stmt" count="4"/>
-        <line num="64" type="stmt" count="4"/>
-        <line num="65" type="stmt" count="1"/>
-        <line num="68" type="stmt" count="3"/>
-        <line num="69" type="stmt" count="3"/>
-        <line num="70" type="stmt" count="3"/>
-        <line num="71" type="stmt" count="3"/>
-        <line num="72" type="stmt" count="3"/>
-        <line num="73" type="stmt" count="3"/>
-        <line num="74" type="stmt" count="3"/>
-        <line num="76" type="stmt" count="3"/>
-        <line num="77" type="stmt" count="0"/>
-        <line num="80" type="stmt" count="3"/>
-        <line num="81" type="stmt" count="2"/>
-        <line num="82" type="stmt" count="3"/>
-        <line num="88" type="method" name="stringify" visibility="private" complexity="3" crap="3.04" count="3"/>
-        <line num="90" type="stmt" count="3"/>
-        <line num="91" type="stmt" count="1"/>
-        <line num="94" type="stmt" count="2"/>
-        <line num="96" type="stmt" count="2"/>
-        <line num="97" type="stmt" count="0"/>
-        <line num="100" type="stmt" count="2"/>
-        <metrics loc="103" ncloc="94" classes="1" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="43" coveredstatements="38" elements="46" coveredelements="38"/>
-      </file>
-    </package>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/DataCiphers/DataCipher.php">
-      <metrics loc="27" ncloc="21" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/DataRefiners/DataRefiner.php">
-      <metrics loc="16" ncloc="13" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <package name="Nuxtifyts\PhpDto\DataRefiners">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/DataRefiners/DateTimeRefiner.php">
-        <class name="Nuxtifyts\PhpDto\DataRefiners\DateTimeRefiner" namespace="Nuxtifyts\PhpDto\DataRefiners">
-          <metrics complexity="8" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="22" coveredstatements="22" elements="24" coveredelements="24"/>
-        </class>
-        <line num="23" type="method" name="__construct" visibility="public" complexity="3" crap="3" count="9"/>
-        <line num="26" type="stmt" count="9"/>
-        <line num="27" type="stmt" count="2"/>
-        <line num="28" type="stmt" count="1"/>
-        <line num="30" type="stmt" count="1"/>
-        <line num="31" type="stmt" count="1"/>
-        <line num="32" type="stmt" count="1"/>
-        <line num="33" type="stmt" count="1"/>
-        <line num="38" type="method" name="refine" visibility="public" complexity="5" crap="5" count="9"/>
-        <line num="40" type="stmt" count="9"/>
-        <line num="41" type="stmt" count="1"/>
-        <line num="44" type="stmt" count="8"/>
-        <line num="45" type="stmt" count="7"/>
-        <line num="47" type="stmt" count="7"/>
-        <line num="48" type="stmt" count="1"/>
-        <line num="51" type="stmt" count="6"/>
-        <line num="53" type="stmt" count="6"/>
-        <line num="54" type="stmt" count="6"/>
-        <line num="55" type="stmt" count="6"/>
-        <line num="56" type="stmt" count="6"/>
-        <line num="57" type="stmt" count="6"/>
-        <line num="58" type="stmt" count="6"/>
-        <line num="59" type="stmt" count="4"/>
-        <line num="63" type="stmt" count="3"/>
-        <metrics loc="66" ncloc="62" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="22" coveredstatements="22" elements="24" coveredelements="24"/>
-      </file>
-    </package>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/Enums/LetterCase.php">
-      <metrics loc="12" ncloc="12" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/Enums/Property/Type.php">
-      <metrics loc="24" ncloc="23" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <package name="Nuxtifyts\PhpDto\Exceptions">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/DataCipherException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\DataCipherException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="5" methods="5" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="20" coveredstatements="4" elements="25" coveredelements="5"/>
-        </class>
-        <line num="15" type="method" name="failedToGetNonceSize" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="17" type="stmt" count="0"/>
-        <line num="18" type="stmt" count="0"/>
-        <line num="19" type="stmt" count="0"/>
-        <line num="20" type="stmt" count="0"/>
-        <line num="23" type="method" name="failedToCipherData" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="25" type="stmt" count="0"/>
-        <line num="26" type="stmt" count="0"/>
-        <line num="27" type="stmt" count="0"/>
-        <line num="28" type="stmt" count="0"/>
-        <line num="31" type="method" name="failedToDecipherData" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="33" type="stmt" count="0"/>
-        <line num="34" type="stmt" count="0"/>
-        <line num="35" type="stmt" count="0"/>
-        <line num="36" type="stmt" count="0"/>
-        <line num="39" type="method" name="failedToStringifyValue" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="41" type="stmt" count="0"/>
-        <line num="42" type="stmt" count="0"/>
-        <line num="43" type="stmt" count="0"/>
-        <line num="44" type="stmt" count="0"/>
-        <line num="47" type="method" name="invalidNonceSize" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="49" type="stmt" count="1"/>
-        <line num="50" type="stmt" count="1"/>
-        <line num="51" type="stmt" count="1"/>
-        <line num="52" type="stmt" count="1"/>
-        <metrics loc="55" ncloc="55" classes="1" methods="5" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="20" coveredstatements="4" elements="25" coveredelements="5"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/DataConfigurationException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\DataConfigurationException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="2" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="4" coveredelements="4"/>
-        </class>
-        <line num="13" type="method" name="invalidBaseSerializers" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="15" type="stmt" count="1"/>
-        <line num="18" type="method" name="invalidBaseNormalizers" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="20" type="stmt" count="1"/>
-        <metrics loc="23" ncloc="23" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="4" coveredelements="4"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/DataCreationException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\DataCreationException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="5" methods="5" coveredmethods="5" conditionals="0" coveredconditionals="0" statements="24" coveredstatements="24" elements="29" coveredelements="29"/>
-        </class>
-        <line num="16" type="method" name="unableToCreateInstance" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="20" type="stmt" count="1"/>
-        <line num="21" type="stmt" count="1"/>
-        <line num="22" type="stmt" count="1"/>
-        <line num="23" type="stmt" count="1"/>
-        <line num="24" type="stmt" count="1"/>
-        <line num="27" type="method" name="invalidProperty" visibility="public" complexity="1" crap="1" count="2"/>
-        <line num="29" type="stmt" count="2"/>
-        <line num="30" type="stmt" count="2"/>
-        <line num="31" type="stmt" count="2"/>
-        <line num="32" type="stmt" count="2"/>
-        <line num="35" type="method" name="unableToCreateEmptyInstance" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="39" type="stmt" count="1"/>
-        <line num="40" type="stmt" count="1"/>
-        <line num="41" type="stmt" count="1"/>
-        <line num="42" type="stmt" count="1"/>
-        <line num="43" type="stmt" count="1"/>
-        <line num="46" type="method" name="unableToCloneInstanceWithNewData" visibility="public" complexity="1" crap="1" count="4"/>
-        <line num="50" type="stmt" count="4"/>
-        <line num="51" type="stmt" count="4"/>
-        <line num="52" type="stmt" count="4"/>
-        <line num="53" type="stmt" count="4"/>
-        <line num="54" type="stmt" count="4"/>
-        <line num="57" type="method" name="invalidParamsPassed" visibility="public" complexity="1" crap="1" count="3"/>
-        <line num="61" type="stmt" count="3"/>
-        <line num="62" type="stmt" count="3"/>
-        <line num="63" type="stmt" count="3"/>
-        <line num="64" type="stmt" count="3"/>
-        <line num="65" type="stmt" count="3"/>
-        <metrics loc="68" ncloc="68" classes="1" methods="5" coveredmethods="5" conditionals="0" coveredconditionals="0" statements="24" coveredstatements="24" elements="29" coveredelements="29"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/DeserializeException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\DeserializeException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="9" methods="9" coveredmethods="5" conditionals="0" coveredconditionals="0" statements="37" coveredstatements="21" elements="46" coveredelements="26"/>
-        </class>
-        <line num="20" type="method" name="generic" visibility="public" complexity="1" crap="1" count="3"/>
-        <line num="22" type="stmt" count="3"/>
-        <line num="23" type="stmt" count="3"/>
-        <line num="24" type="stmt" count="3"/>
-        <line num="25" type="stmt" count="3"/>
-        <line num="26" type="stmt" count="3"/>
-        <line num="29" type="method" name="invalidValue" visibility="public" complexity="1" crap="1" count="3"/>
-        <line num="31" type="stmt" count="3"/>
-        <line num="32" type="stmt" count="3"/>
-        <line num="33" type="stmt" count="3"/>
-        <line num="34" type="stmt" count="3"/>
-        <line num="37" type="method" name="propertyIsNotNullable" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="39" type="stmt" count="1"/>
-        <line num="40" type="stmt" count="1"/>
-        <line num="41" type="stmt" count="1"/>
-        <line num="42" type="stmt" count="1"/>
-        <line num="45" type="method" name="unableToDeserializeScalarTypeItem" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="47" type="stmt" count="0"/>
-        <line num="48" type="stmt" count="0"/>
-        <line num="49" type="stmt" count="0"/>
-        <line num="50" type="stmt" count="0"/>
-        <line num="53" type="method" name="unableToDeserializeBackedEnumItem" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="55" type="stmt" count="0"/>
-        <line num="56" type="stmt" count="0"/>
-        <line num="57" type="stmt" count="0"/>
-        <line num="58" type="stmt" count="0"/>
-        <line num="61" type="method" name="unableToDeserializeDateTimeItem" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="63" type="stmt" count="0"/>
-        <line num="64" type="stmt" count="0"/>
-        <line num="65" type="stmt" count="0"/>
-        <line num="66" type="stmt" count="0"/>
-        <line num="69" type="method" name="unableToDeserializeDataItem" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="71" type="stmt" count="1"/>
-        <line num="72" type="stmt" count="1"/>
-        <line num="73" type="stmt" count="1"/>
-        <line num="74" type="stmt" count="1"/>
-        <line num="77" type="method" name="unableToDeserializeArrayItem" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="79" type="stmt" count="0"/>
-        <line num="80" type="stmt" count="0"/>
-        <line num="81" type="stmt" count="0"/>
-        <line num="82" type="stmt" count="0"/>
-        <line num="85" type="method" name="invalidParamsPassed" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="87" type="stmt" count="1"/>
-        <line num="88" type="stmt" count="1"/>
-        <line num="89" type="stmt" count="1"/>
-        <line num="90" type="stmt" count="1"/>
-        <metrics loc="93" ncloc="93" classes="1" methods="9" coveredmethods="5" conditionals="0" coveredconditionals="0" statements="37" coveredstatements="21" elements="46" coveredelements="26"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/FallbackResolverException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\FallbackResolverException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-        </class>
-        <line num="11" type="method" name="unableToFindResolverClass" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="13" type="stmt" count="1"/>
-        <line num="14" type="stmt" count="1"/>
-        <line num="15" type="stmt" count="1"/>
-        <line num="16" type="stmt" count="1"/>
-        <metrics loc="19" ncloc="19" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/InvalidRefiner.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\InvalidRefiner" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-        </class>
-        <line num="13" type="method" name="emptyTypeContexts" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="15" type="stmt" count="1"/>
-        <line num="16" type="stmt" count="1"/>
-        <line num="17" type="stmt" count="1"/>
-        <line num="18" type="stmt" count="1"/>
-        <metrics loc="21" ncloc="21" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="4" elements="5" coveredelements="5"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/SerializeException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\SerializeException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="6" methods="6" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="25" coveredstatements="17" elements="31" coveredelements="21"/>
-        </class>
-        <line num="18" type="method" name="generic" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="20" type="stmt" count="1"/>
-        <line num="21" type="stmt" count="1"/>
-        <line num="22" type="stmt" count="1"/>
-        <line num="23" type="stmt" count="1"/>
-        <line num="24" type="stmt" count="1"/>
-        <line num="27" type="method" name="unableToSerializeScalarTypeItem" visibility="public" complexity="1" crap="1" count="2"/>
-        <line num="29" type="stmt" count="2"/>
-        <line num="30" type="stmt" count="2"/>
-        <line num="31" type="stmt" count="2"/>
-        <line num="32" type="stmt" count="2"/>
-        <line num="35" type="method" name="unableToSerializeBackedEnumItem" visibility="public" complexity="1" crap="1" count="2"/>
-        <line num="37" type="stmt" count="2"/>
-        <line num="38" type="stmt" count="2"/>
-        <line num="39" type="stmt" count="2"/>
-        <line num="40" type="stmt" count="2"/>
-        <line num="43" type="method" name="unableToSerializeDateTimeItem" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="45" type="stmt" count="0"/>
-        <line num="46" type="stmt" count="0"/>
-        <line num="47" type="stmt" count="0"/>
-        <line num="48" type="stmt" count="0"/>
-        <line num="51" type="method" name="unableToSerializeDataItem" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="53" type="stmt" count="1"/>
-        <line num="54" type="stmt" count="1"/>
-        <line num="55" type="stmt" count="1"/>
-        <line num="56" type="stmt" count="1"/>
-        <line num="59" type="method" name="unableToSerializeArrayItem" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="61" type="stmt" count="0"/>
-        <line num="62" type="stmt" count="0"/>
-        <line num="63" type="stmt" count="0"/>
-        <line num="64" type="stmt" count="0"/>
-        <metrics loc="67" ncloc="67" classes="1" methods="6" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="25" coveredstatements="17" elements="31" coveredelements="21"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/UnknownTypeException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\UnknownTypeException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="12" elements="13" coveredelements="13"/>
-        </class>
-        <line num="12" type="method" name="unknownType" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="14" type="stmt" count="1"/>
-        <line num="15" type="stmt" count="1"/>
-        <line num="16" type="stmt" count="1"/>
-        <line num="17" type="stmt" count="1"/>
-        <line num="19" type="stmt" count="1"/>
-        <line num="20" type="stmt" count="1"/>
-        <line num="21" type="stmt" count="1"/>
-        <line num="22" type="stmt" count="1"/>
-        <line num="23" type="stmt" count="1"/>
-        <line num="24" type="stmt" count="1"/>
-        <line num="25" type="stmt" count="1"/>
-        <line num="26" type="stmt" count="1"/>
-        <metrics loc="29" ncloc="29" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="12" elements="13" coveredelements="13"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Exceptions/UnsupportedTypeException.php">
-        <class name="Nuxtifyts\PhpDto\Exceptions\UnsupportedTypeException" namespace="Nuxtifyts\PhpDto\Exceptions">
-          <metrics complexity="5" methods="4" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="3" elements="16" coveredelements="4"/>
-        </class>
-        <line num="14" type="method" name="unknownType" visibility="public" complexity="2" crap="2" count="1"/>
-        <line num="16" type="stmt" count="1"/>
-        <line num="17" type="stmt" count="1"/>
-        <line num="18" type="stmt" count="1"/>
-        <line num="21" type="method" name="emptyType" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="23" type="stmt" count="0"/>
-        <line num="24" type="stmt" count="0"/>
-        <line num="25" type="stmt" count="0"/>
-        <line num="28" type="method" name="invalidReflection" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="30" type="stmt" count="0"/>
-        <line num="31" type="stmt" count="0"/>
-        <line num="32" type="stmt" count="0"/>
-        <line num="35" type="method" name="invalidType" visibility="public" complexity="1" crap="2" count="0"/>
-        <line num="37" type="stmt" count="0"/>
-        <line num="38" type="stmt" count="0"/>
-        <line num="39" type="stmt" count="0"/>
-        <metrics loc="42" ncloc="42" classes="1" methods="4" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="3" elements="16" coveredelements="4"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\FallbackResolver">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/FallbackResolver/FallbackConfig.php">
-        <class name="Nuxtifyts\PhpDto\FallbackResolver\FallbackConfig" namespace="Nuxtifyts\PhpDto\FallbackResolver">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-        </class>
-        <line num="13" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="3"/>
-        <line num="17" type="stmt" count="3"/>
-        <metrics loc="19" ncloc="15" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-      </file>
-    </package>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/FallbackResolver/FallbackResolver.php">
-      <metrics loc="17" ncloc="12" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <package name="Nuxtifyts\PhpDto\Normalizers">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Normalizers/ArrayAccessNormalizer.php">
-        <class name="Nuxtifyts\PhpDto\Normalizers\ArrayAccessNormalizer" namespace="Nuxtifyts\PhpDto\Normalizers">
-          <metrics complexity="10" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="19" coveredstatements="19" elements="22" coveredelements="22"/>
-        </class>
-        <line num="11" type="method" name="normalize" visibility="public" complexity="2" crap="2" count="12"/>
-        <line num="13" type="stmt" count="12"/>
-        <line num="14" type="stmt" count="12"/>
-        <line num="20" type="method" name="normalizeIterable" visibility="private" complexity="4" crap="4" count="12"/>
-        <line num="22" type="stmt" count="12"/>
-        <line num="23" type="stmt" count="3"/>
-        <line num="26" type="stmt" count="9"/>
-        <line num="28" type="stmt" count="9"/>
-        <line num="29" type="stmt" count="9"/>
-        <line num="30" type="stmt" count="3"/>
-        <line num="33" type="stmt" count="6"/>
-        <line num="36" type="stmt" count="6"/>
-        <line num="42" type="method" name="normalizeArrayAccess" visibility="private" complexity="4" crap="4" count="6"/>
-        <line num="45" type="stmt" count="6"/>
-        <line num="46" type="stmt" count="4"/>
-        <line num="49" type="stmt" count="2"/>
-        <line num="51" type="stmt" count="2"/>
-        <line num="53" type="stmt" count="2"/>
-        <line num="54" type="stmt" count="2"/>
-        <line num="57" type="stmt" count="1"/>
-        <line num="58" type="stmt" count="1"/>
-        <line num="59" type="stmt" count="1"/>
-        <metrics loc="63" ncloc="57" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="19" coveredstatements="19" elements="22" coveredelements="22"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Normalizers/ArrayNormalizer.php">
-        <class name="Nuxtifyts\PhpDto\Normalizers\ArrayNormalizer" namespace="Nuxtifyts\PhpDto\Normalizers">
-          <metrics complexity="6" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" elements="11" coveredelements="11"/>
-        </class>
-        <line num="7" type="method" name="normalize" visibility="public" complexity="6" crap="6" count="6"/>
-        <line num="10" type="stmt" count="6"/>
-        <line num="12" type="stmt" count="6"/>
-        <line num="13" type="stmt" count="6"/>
-        <line num="16" type="stmt" count="4"/>
-        <line num="19" type="stmt" count="2"/>
-        <line num="21" type="stmt" count="2"/>
-        <line num="22" type="stmt" count="2"/>
-        <line num="23" type="stmt" count="1"/>
-        <line num="26" type="stmt" count="1"/>
-        <line num="29" type="stmt" count="1"/>
-        <metrics loc="32" ncloc="32" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" elements="11" coveredelements="11"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Normalizers/JsonStringNormalizer.php">
-        <class name="Nuxtifyts\PhpDto\Normalizers\JsonStringNormalizer" namespace="Nuxtifyts\PhpDto\Normalizers">
-          <metrics complexity="6" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="12" elements="13" coveredelements="13"/>
-        </class>
-        <line num="7" type="method" name="normalize" visibility="public" complexity="6" crap="6" count="11"/>
-        <line num="9" type="stmt" count="11"/>
-        <line num="10" type="stmt" count="8"/>
-        <line num="13" type="stmt" count="4"/>
-        <line num="16" type="stmt" count="4"/>
-        <line num="17" type="stmt" count="4"/>
-        <line num="19" type="stmt" count="1"/>
-        <line num="22" type="stmt" count="3"/>
-        <line num="24" type="stmt" count="3"/>
-        <line num="25" type="stmt" count="3"/>
-        <line num="26" type="stmt" count="1"/>
-        <line num="29" type="stmt" count="3"/>
-        <line num="32" type="stmt" count="2"/>
-        <metrics loc="35" ncloc="35" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="12" elements="13" coveredelements="13"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Normalizers/Normalizer.php">
-        <class name="Nuxtifyts\PhpDto\Normalizers\Normalizer" namespace="Nuxtifyts\PhpDto\Normalizers">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-        </class>
-        <line num="12" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="24"/>
-        <line num="16" type="stmt" count="24"/>
-        <metrics loc="23" ncloc="17" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Normalizers/StdClassNormalizer.php">
-        <class name="Nuxtifyts\PhpDto\Normalizers\StdClassNormalizer" namespace="Nuxtifyts\PhpDto\Normalizers">
-          <metrics complexity="4" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" elements="10" coveredelements="10"/>
-        </class>
-        <line num="9" type="method" name="normalize" visibility="public" complexity="4" crap="4" count="10"/>
-        <line num="11" type="stmt" count="10"/>
-        <line num="12" type="stmt" count="8"/>
-        <line num="15" type="stmt" count="3"/>
-        <line num="17" type="stmt" count="3"/>
-        <line num="19" type="stmt" count="3"/>
-        <line num="20" type="stmt" count="3"/>
-        <line num="21" type="stmt" count="1"/>
-        <line num="24" type="stmt" count="2"/>
-        <line num="27" type="stmt" count="2"/>
-        <metrics loc="30" ncloc="30" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" elements="10" coveredelements="10"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Normalizers\Concerns">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Normalizers/Concerns/HasNormalizers.php">
-        <class name="Nuxtifyts\PhpDto\Normalizers\Concerns\HasNormalizers" namespace="Nuxtifyts\PhpDto\Normalizers\Concerns">
-          <metrics complexity="5" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="11" coveredstatements="11" elements="14" coveredelements="14"/>
-        </class>
-        <line num="22" type="method" name="normalizeValue" visibility="protected" complexity="3" crap="3" count="43"/>
-        <line num="27" type="stmt" count="43"/>
-        <line num="28" type="stmt" count="43"/>
-        <line num="30" type="stmt" count="43"/>
-        <line num="31" type="stmt" count="39"/>
-        <line num="35" type="stmt" count="7"/>
-        <line num="45" type="method" name="allNormalizer" visibility="protected" complexity="1" crap="1" count="44"/>
-        <line num="47" type="stmt" count="44"/>
-        <line num="48" type="stmt" count="44"/>
-        <line num="49" type="stmt" count="44"/>
-        <line num="50" type="stmt" count="44"/>
-        <line num="51" type="stmt" count="44"/>
-        <line num="57" type="method" name="normalizers" visibility="protected" complexity="1" crap="1" count="39"/>
-        <line num="59" type="stmt" count="39"/>
-        <metrics loc="62" ncloc="44" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="11" coveredstatements="11" elements="14" coveredelements="14"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Pipelines/DeserializePipeline/DeserializePipeline.php">
-        <class name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\DeserializePipeline" namespace="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline">
-          <metrics complexity="2" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="11" coveredstatements="11" elements="13" coveredelements="13"/>
-        </class>
-        <line num="17" type="method" name="hydrateFromArray" visibility="public" complexity="1" crap="1" count="28"/>
-        <line num="19" type="stmt" count="28"/>
-        <line num="20" type="stmt" count="28"/>
-        <line num="21" type="stmt" count="28"/>
-        <line num="22" type="stmt" count="28"/>
-        <line num="23" type="stmt" count="28"/>
-        <line num="24" type="stmt" count="28"/>
-        <line num="31" type="method" name="createFromArray" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="33" type="stmt" count="1"/>
-        <line num="34" type="stmt" count="1"/>
-        <line num="35" type="stmt" count="1"/>
-        <line num="36" type="stmt" count="1"/>
-        <line num="37" type="stmt" count="1"/>
-        <metrics loc="40" ncloc="33" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="11" coveredstatements="11" elements="13" coveredelements="13"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Pipelines/DeserializePipeline/DeserializePipelinePassable.php">
-        <class name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\DeserializePipelinePassable" namespace="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline">
-          <metrics complexity="2" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="4" coveredelements="4"/>
-        </class>
-        <line num="17" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="29"/>
-        <line num="21" type="stmt" count="29"/>
-        <line num="26" type="method" name="with" visibility="public" complexity="1" crap="1" count="29"/>
-        <line num="28" type="stmt" count="29"/>
-        <metrics loc="31" ncloc="22" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="4" coveredelements="4"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Pipelines/DeserializePipeline/Pipes/DecipherDataPipe.php">
-        <class name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes\DecipherDataPipe" namespace="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes">
-          <metrics complexity="5" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" elements="14" coveredelements="14"/>
-        </class>
-        <line num="14" type="method" name="handle" visibility="public" complexity="5" crap="5" count="8"/>
-        <line num="16" type="stmt" count="8"/>
-        <line num="18" type="stmt" count="8"/>
-        <line num="19" type="stmt" count="8"/>
-        <line num="22" type="stmt" count="8"/>
-        <line num="23" type="stmt" count="4"/>
-        <line num="24" type="stmt" count="8"/>
-        <line num="26" type="stmt" count="5"/>
-        <line num="29" type="stmt" count="4"/>
-        <line num="30" type="stmt" count="4"/>
-        <line num="31" type="stmt" count="4"/>
-        <line num="32" type="stmt" count="4"/>
-        <line num="33" type="stmt" count="4"/>
-        <line num="36" type="stmt" count="7"/>
-        <metrics loc="39" ncloc="36" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" elements="14" coveredelements="14"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Pipelines/DeserializePipeline/Pipes/MapNamesPipe.php">
-        <class name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes\MapNamesPipe" namespace="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes">
-          <metrics complexity="5" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" elements="11" coveredelements="11"/>
-        </class>
-        <line num="14" type="method" name="handle" visibility="public" complexity="5" crap="5" count="9"/>
-        <line num="16" type="stmt" count="9"/>
-        <line num="17" type="stmt" count="4"/>
-        <line num="20" type="stmt" count="5"/>
-        <line num="22" type="stmt" count="5"/>
-        <line num="23" type="stmt" count="5"/>
-        <line num="25" type="stmt" count="5"/>
-        <line num="26" type="stmt" count="2"/>
-        <line num="29" type="stmt" count="4"/>
-        <line num="30" type="stmt" count="4"/>
-        <line num="33" type="stmt" count="5"/>
-        <metrics loc="36" ncloc="33" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" elements="11" coveredelements="11"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Pipelines/DeserializePipeline/Pipes/RefineDataPipe.php">
-        <class name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes\RefineDataPipe" namespace="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes">
-          <metrics complexity="5" methods="1" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="11" elements="13" coveredelements="11"/>
-        </class>
-        <line num="15" type="method" name="handle" visibility="public" complexity="5" crap="5.01" count="31"/>
-        <line num="17" type="stmt" count="31"/>
-        <line num="19" type="stmt" count="31"/>
-        <line num="20" type="stmt" count="31"/>
-        <line num="22" type="stmt" count="31"/>
-        <line num="23" type="stmt" count="11"/>
-        <line num="26" type="stmt" count="31"/>
-        <line num="28" type="stmt" count="2"/>
-        <line num="29" type="stmt" count="2"/>
-        <line num="30" type="stmt" count="2"/>
-        <line num="31" type="stmt" count="2"/>
-        <line num="32" type="stmt" count="0"/>
-        <line num="36" type="stmt" count="31"/>
-        <metrics loc="39" ncloc="36" classes="1" methods="1" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="11" elements="13" coveredelements="11"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Pipelines/DeserializePipeline/Pipes/ResolveDefaultDataPipe.php">
-        <class name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes\ResolveDefaultDataPipe" namespace="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes">
-          <metrics complexity="7" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="19" coveredstatements="19" elements="20" coveredelements="20"/>
-        </class>
-        <line num="15" type="method" name="handle" visibility="public" complexity="7" crap="7" count="9"/>
-        <line num="17" type="stmt" count="9"/>
-        <line num="19" type="stmt" count="9"/>
-        <line num="20" type="stmt" count="9"/>
-        <line num="21" type="stmt" count="4"/>
-        <line num="24" type="stmt" count="6"/>
-        <line num="25" type="stmt" count="3"/>
-        <line num="26" type="stmt" count="1"/>
-        <line num="27" type="stmt" count="2"/>
-        <line num="30" type="stmt" count="6"/>
-        <line num="31" type="stmt" count="6"/>
-        <line num="32" type="stmt" count="6"/>
-        <line num="33" type="stmt" count="6"/>
-        <line num="36" type="stmt" count="6"/>
-        <line num="37" type="stmt" count="6"/>
-        <line num="38" type="stmt" count="6"/>
-        <line num="39" type="stmt" count="6"/>
-        <line num="42" type="stmt" count="5"/>
-        <line num="43" type="stmt" count="2"/>
-        <line num="48" type="stmt" count="9"/>
-        <metrics loc="51" ncloc="47" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="19" coveredstatements="19" elements="20" coveredelements="20"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Pipelines/DeserializePipeline/Pipes/ResolveValuesFromAliasesPipe.php">
-        <class name="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes\ResolveValuesFromAliasesPipe" namespace="Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\Pipes">
-          <metrics complexity="5" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="11" coveredstatements="11" elements="12" coveredelements="12"/>
-        </class>
-        <line num="14" type="method" name="handle" visibility="public" complexity="5" crap="5" count="5"/>
-        <line num="16" type="stmt" count="5"/>
-        <line num="18" type="stmt" count="5"/>
-        <line num="19" type="stmt" count="5"/>
-        <line num="21" type="stmt" count="5"/>
-        <line num="22" type="stmt" count="4"/>
-        <line num="25" type="stmt" count="2"/>
-        <line num="27" type="stmt" count="2"/>
-        <line num="28" type="stmt" count="1"/>
-        <line num="29" type="stmt" count="1"/>
-        <line num="30" type="stmt" count="1"/>
-        <line num="35" type="stmt" count="5"/>
-        <metrics loc="38" ncloc="35" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="11" coveredstatements="11" elements="12" coveredelements="12"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Serializers">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/ArraySerializer.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\ArraySerializer" namespace="Nuxtifyts\PhpDto\Serializers">
-          <metrics complexity="20" methods="3" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="25" coveredstatements="22" elements="28" coveredelements="23"/>
-        </class>
-        <line num="14" type="method" name="supportedTypes" visibility="public" complexity="1" crap="1" count="14"/>
-        <line num="16" type="stmt" count="14"/>
-        <line num="17" type="stmt" count="14"/>
-        <line num="18" type="stmt" count="14"/>
-        <line num="26" type="method" name="serializeItem" visibility="protected" complexity="10" crap="10.46" count="11"/>
-        <line num="28" type="stmt" count="11"/>
-        <line num="29" type="stmt" count="1"/>
-        <line num="32" type="stmt" count="10"/>
-        <line num="33" type="stmt" count="10"/>
-        <line num="35" type="stmt" count="10"/>
-        <line num="37" type="stmt" count="10"/>
-        <line num="38" type="stmt" count="10"/>
-        <line num="40" type="stmt" count="10"/>
-        <line num="41" type="stmt" count="10"/>
-        <line num="44" type="stmt" count="1"/>
-        <line num="47" type="stmt" count="0"/>
-        <line num="52" type="stmt" count="0"/>
-        <line num="60" type="method" name="deserializeItem" visibility="protected" complexity="9" crap="9.08" count="11"/>
-        <line num="62" type="stmt" count="11"/>
-        <line num="63" type="stmt" count="10"/>
-        <line num="65" type="stmt" count="10"/>
-        <line num="67" type="stmt" count="10"/>
-        <line num="68" type="stmt" count="10"/>
-        <line num="70" type="stmt" count="1"/>
-        <line num="73" type="stmt" count="0"/>
-        <line num="78" type="stmt" count="1"/>
-        <line num="79" type="stmt" count="1"/>
-        <line num="80" type="stmt" count="1"/>
-        <metrics loc="83" ncloc="73" classes="1" methods="3" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="25" coveredstatements="22" elements="28" coveredelements="23"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/BackedEnumSerializer.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\BackedEnumSerializer" namespace="Nuxtifyts\PhpDto\Serializers">
-          <metrics complexity="19" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="30" coveredstatements="28" elements="33" coveredelements="30"/>
-        </class>
-        <line num="18" type="method" name="supportedTypes" visibility="public" complexity="1" crap="1" count="35"/>
-        <line num="20" type="stmt" count="35"/>
-        <line num="21" type="stmt" count="35"/>
-        <line num="22" type="stmt" count="35"/>
-        <line num="28" type="method" name="serializeItem" visibility="protected" complexity="5" crap="5" count="18"/>
-        <line num="31" type="stmt" count="18"/>
-        <line num="32" type="stmt" count="17"/>
-        <line num="33" type="stmt" count="18"/>
-        <line num="40" type="method" name="deserializeItem" visibility="protected" complexity="13" crap="13.10" count="19"/>
-        <line num="42" type="stmt" count="19"/>
-        <line num="43" type="stmt" count="1"/>
-        <line num="44" type="stmt" count="1"/>
-        <line num="45" type="stmt" count="1"/>
-        <line num="49" type="stmt" count="18"/>
-        <line num="50" type="stmt" count="18"/>
-        <line num="51" type="stmt" count="18"/>
-        <line num="53" type="stmt" count="2"/>
-        <line num="56" type="stmt" count="16"/>
-        <line num="57" type="stmt" count="3"/>
-        <line num="59" type="stmt" count="16"/>
-        <line num="61" type="stmt" count="16"/>
-        <line num="62" type="stmt" count="0"/>
-        <line num="65" type="stmt" count="16"/>
-        <line num="66" type="stmt" count="2"/>
-        <line num="67" type="stmt" count="2"/>
-        <line num="69" type="stmt" count="0"/>
-        <line num="73" type="stmt" count="14"/>
-        <line num="75" type="stmt" count="14"/>
-        <line num="76" type="stmt" count="14"/>
-        <line num="77" type="stmt" count="14"/>
-        <line num="79" type="stmt" count="14"/>
-        <line num="80" type="stmt" count="14"/>
-        <line num="89" type="stmt" count="2"/>
-        <metrics loc="92" ncloc="83" classes="1" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="30" coveredstatements="28" elements="33" coveredelements="30"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/DataSerializer.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\DataSerializer" namespace="Nuxtifyts\PhpDto\Serializers">
-          <metrics complexity="17" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="30" coveredstatements="28" elements="33" coveredelements="30"/>
-        </class>
-        <line num="20" type="method" name="supportedTypes" visibility="public" complexity="1" crap="1" count="34"/>
-        <line num="22" type="stmt" count="34"/>
-        <line num="23" type="stmt" count="34"/>
-        <line num="24" type="stmt" count="34"/>
-        <line num="32" type="method" name="serializeItem" visibility="protected" complexity="5" crap="5" count="11"/>
-        <line num="34" type="stmt" count="11"/>
-        <line num="35" type="stmt" count="11"/>
-        <line num="37" type="stmt" count="11"/>
-        <line num="39" type="stmt" count="11"/>
-        <line num="40" type="stmt" count="11"/>
-        <line num="46" type="method" name="deserializeItem" visibility="protected" complexity="11" crap="11.09" count="14"/>
-        <line num="48" type="stmt" count="14"/>
-        <line num="49" type="stmt" count="6"/>
-        <line num="51" type="stmt" count="14"/>
-        <line num="52" type="stmt" count="10"/>
-        <line num="54" type="stmt" count="10"/>
-        <line num="55" type="stmt" count="0"/>
-        <line num="58" type="stmt" count="10"/>
-        <line num="60" type="stmt" count="10"/>
-        <line num="61" type="stmt" count="10"/>
-        <line num="62" type="stmt" count="10"/>
-        <line num="64" type="stmt" count="9"/>
-        <line num="65" type="stmt" count="0"/>
-        <line num="68" type="stmt" count="9"/>
-        <line num="75" type="stmt" count="6"/>
-        <line num="77" type="stmt" count="2"/>
-        <line num="78" type="stmt" count="2"/>
-        <line num="79" type="stmt" count="2"/>
-        <line num="80" type="stmt" count="2"/>
-        <line num="82" type="stmt" count="2"/>
-        <line num="86" type="stmt" count="5"/>
-        <line num="87" type="stmt" count="2"/>
-        <line num="88" type="stmt" count="5"/>
-        <metrics loc="91" ncloc="80" classes="1" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="30" coveredstatements="28" elements="33" coveredelements="30"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/DateTimeSerializer.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\DateTimeSerializer" namespace="Nuxtifyts\PhpDto\Serializers">
-          <metrics complexity="18" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="29" coveredstatements="27" elements="32" coveredelements="29"/>
-        </class>
-        <line num="20" type="method" name="supportedTypes" visibility="public" complexity="1" crap="1" count="36"/>
-        <line num="22" type="stmt" count="36"/>
-        <line num="23" type="stmt" count="36"/>
-        <line num="24" type="stmt" count="36"/>
-        <line num="30" type="method" name="serializeItem" visibility="protected" complexity="5" crap="5" count="9"/>
-        <line num="32" type="stmt" count="9"/>
-        <line num="33" type="stmt" count="9"/>
-        <line num="35" type="stmt" count="6"/>
-        <line num="37" type="stmt" count="9"/>
-        <line num="38" type="stmt" count="9"/>
-        <line num="44" type="method" name="deserializeItem" visibility="protected" complexity="12" crap="12.12" count="12"/>
-        <line num="46" type="stmt" count="12"/>
-        <line num="47" type="stmt" count="1"/>
-        <line num="49" type="stmt" count="12"/>
-        <line num="50" type="stmt" count="7"/>
-        <line num="52" type="stmt" count="7"/>
-        <line num="53" type="stmt" count="0"/>
-        <line num="56" type="stmt" count="7"/>
-        <line num="57" type="stmt" count="1"/>
-        <line num="60" type="stmt" count="6"/>
-        <line num="62" type="stmt" count="5"/>
-        <line num="63" type="stmt" count="0"/>
-        <line num="66" type="stmt" count="5"/>
-        <line num="73" type="stmt" count="6"/>
-        <line num="74" type="stmt" count="2"/>
-        <line num="75" type="stmt" count="2"/>
-        <line num="76" type="stmt" count="2"/>
-        <line num="77" type="stmt" count="2"/>
-        <line num="78" type="stmt" count="2"/>
-        <line num="82" type="stmt" count="5"/>
-        <line num="83" type="stmt" count="3"/>
-        <line num="84" type="stmt" count="5"/>
-        <metrics loc="87" ncloc="79" classes="1" methods="3" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="29" coveredstatements="27" elements="32" coveredelements="29"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/ScalarTypeSerializer.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\ScalarTypeSerializer" namespace="Nuxtifyts\PhpDto\Serializers">
-          <metrics complexity="13" methods="4" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="29" coveredstatements="29" elements="33" coveredelements="33"/>
-        </class>
-        <line num="17" type="method" name="supportedTypes" visibility="public" complexity="1" crap="1" count="19"/>
-        <line num="19" type="stmt" count="19"/>
-        <line num="20" type="stmt" count="19"/>
-        <line num="21" type="stmt" count="19"/>
-        <line num="22" type="stmt" count="19"/>
-        <line num="23" type="stmt" count="19"/>
-        <line num="24" type="stmt" count="19"/>
-        <line num="30" type="method" name="getScalarTypeFromProperty" visibility="private" complexity="2" crap="2" count="15"/>
-        <line num="33" type="stmt" count="15"/>
-        <line num="34" type="stmt" count="15"/>
-        <line num="35" type="stmt" count="15"/>
-        <line num="36" type="stmt" count="15"/>
-        <line num="37" type="stmt" count="15"/>
-        <line num="43" type="method" name="serializeItem" visibility="protected" complexity="5" crap="5" count="17"/>
-        <line num="45" type="stmt" count="16"/>
-        <line num="46" type="stmt" count="17"/>
-        <line num="48" type="stmt" count="16"/>
-        <line num="49" type="stmt" count="16"/>
-        <line num="50" type="stmt" count="16"/>
-        <line num="51" type="stmt" count="16"/>
-        <line num="53" type="stmt" count="17"/>
-        <line num="54" type="stmt" count="16"/>
-        <line num="60" type="method" name="deserializeItem" visibility="protected" complexity="5" crap="5" count="17"/>
-        <line num="62" type="stmt" count="15"/>
-        <line num="63" type="stmt" count="17"/>
-        <line num="64" type="stmt" count="1"/>
-        <line num="65" type="stmt" count="2"/>
-        <line num="67" type="stmt" count="15"/>
-        <line num="68" type="stmt" count="15"/>
-        <line num="69" type="stmt" count="15"/>
-        <line num="70" type="stmt" count="15"/>
-        <line num="72" type="stmt" count="16"/>
-        <line num="73" type="stmt" count="15"/>
-        <metrics loc="76" ncloc="67" classes="1" methods="4" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="29" coveredstatements="29" elements="33" coveredelements="33"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/Serializer.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\Serializer" namespace="Nuxtifyts\PhpDto\Serializers">
-          <metrics complexity="3" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="7" coveredstatements="7" elements="10" coveredelements="10"/>
-        </class>
-        <line num="13" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="46"/>
-        <line num="15" type="stmt" count="46"/>
-        <line num="27" type="method" name="serialize" visibility="public" complexity="1" crap="1" count="49"/>
-        <line num="29" type="stmt" count="49"/>
-        <line num="31" type="stmt" count="49"/>
-        <line num="32" type="stmt" count="49"/>
-        <line num="33" type="stmt" count="49"/>
-        <line num="41" type="method" name="deserialize" visibility="public" complexity="1" crap="1" count="58"/>
-        <line num="43" type="stmt" count="58"/>
-        <line num="45" type="stmt" count="58"/>
-        <metrics loc="58" ncloc="39" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="7" coveredstatements="7" elements="10" coveredelements="10"/>
-      </file>
-    </package>
-    <package name="Nuxtifyts\PhpDto\Serializers\Concerns">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/Concerns/HasSerializers.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\Concerns\HasSerializers" namespace="Nuxtifyts\PhpDto\Serializers\Concerns">
-          <metrics complexity="7" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="17" coveredstatements="17" elements="20" coveredelements="20"/>
-        </class>
-        <line num="26" type="method" name="getSerializersFromPropertyContext" visibility="protected" complexity="3" crap="3" count="13"/>
-        <line num="29" type="stmt" count="13"/>
-        <line num="31" type="stmt" count="13"/>
-        <line num="32" type="stmt" count="13"/>
-        <line num="33" type="stmt" count="13"/>
-        <line num="34" type="stmt" count="13"/>
-        <line num="35" type="stmt" count="13"/>
-        <line num="36" type="stmt" count="13"/>
-        <line num="37" type="stmt" count="13"/>
-        <line num="48" type="method" name="getSerializersFromTypeContext" visibility="protected" complexity="3" crap="3" count="12"/>
-        <line num="51" type="stmt" count="12"/>
-        <line num="53" type="stmt" count="12"/>
-        <line num="54" type="stmt" count="12"/>
-        <line num="55" type="stmt" count="12"/>
-        <line num="56" type="stmt" count="12"/>
-        <line num="57" type="stmt" count="12"/>
-        <line num="58" type="stmt" count="12"/>
-        <line num="59" type="stmt" count="12"/>
-        <line num="68" type="method" name="serializers" visibility="public" complexity="1" crap="1" count="27"/>
-        <line num="70" type="stmt" count="27"/>
-        <metrics loc="78" ncloc="50" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="17" coveredstatements="17" elements="20" coveredelements="20"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/Concerns/SerializesArrayOfItems.php">
-        <class name="Nuxtifyts\PhpDto\Serializers\Concerns\SerializesArrayOfItems" namespace="Nuxtifyts\PhpDto\Serializers\Concerns">
-          <metrics complexity="6" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="15" coveredstatements="15" elements="17" coveredelements="17"/>
-        </class>
-        <line num="20" type="method" name="serializeArrayOfItems" visibility="public" complexity="5" crap="5" count="13"/>
-        <line num="24" type="stmt" count="13"/>
-        <line num="26" type="stmt" count="13"/>
-        <line num="27" type="stmt" count="13"/>
-        <line num="28" type="stmt" count="13"/>
-        <line num="30" type="stmt" count="13"/>
-        <line num="31" type="stmt" count="13"/>
-        <line num="32" type="stmt" count="13"/>
-        <line num="33" type="stmt" count="13"/>
-        <line num="35" type="stmt" count="13"/>
-        <line num="36" type="stmt" count="13"/>
-        <line num="37" type="stmt" count="13"/>
-        <line num="47" type="method" name="deserializeArrayOfItems" visibility="public" complexity="1" crap="1" count="14"/>
-        <line num="51" type="stmt" count="14"/>
-        <line num="52" type="stmt" count="14"/>
-        <line num="53" type="stmt" count="14"/>
-        <line num="54" type="stmt" count="14"/>
-        <metrics loc="57" ncloc="42" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="15" coveredstatements="15" elements="17" coveredelements="17"/>
-      </file>
-    </package>
-    <file name="/Users/faroukbraik/Dev/php-dto/src/Serializers/Contracts/SerializesArrayOfItems.php">
-      <metrics loc="33" ncloc="21" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-    </file>
-    <package name="Nuxtifyts\PhpDto\Support">
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Support/Arr.php">
-        <class name="Nuxtifyts\PhpDto\Support\Arr" namespace="Nuxtifyts\PhpDto\Support">
-          <metrics complexity="4" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="7" coveredstatements="7" elements="9" coveredelements="9"/>
-        </class>
-        <line num="14" type="method" name="getArray" visibility="public" complexity="2" crap="2" count="3"/>
-        <line num="16" type="stmt" count="3"/>
-        <line num="18" type="stmt" count="3"/>
-        <line num="25" type="method" name="isArrayOfClassStrings" visibility="public" complexity="2" crap="2" count="2"/>
-        <line num="27" type="stmt" count="2"/>
-        <line num="28" type="stmt" count="2"/>
-        <line num="29" type="stmt" count="2"/>
-        <line num="30" type="stmt" count="2"/>
-        <line num="31" type="stmt" count="2"/>
-        <metrics loc="34" ncloc="23" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="7" coveredstatements="7" elements="9" coveredelements="9"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Support/Passable.php">
-        <class name="Nuxtifyts\PhpDto\Support\Passable" namespace="Nuxtifyts\PhpDto\Support">
-          <metrics complexity="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-        </class>
-        <metrics loc="8" ncloc="8" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Support/Pipe.php">
-        <class name="Nuxtifyts\PhpDto\Support\Pipe" namespace="Nuxtifyts\PhpDto\Support">
-          <metrics complexity="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-        </class>
-        <line num="12" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="46"/>
-        <metrics loc="23" ncloc="13" classes="1" methods="1" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="2" coveredelements="2"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Support/Pipeline.php">
-        <class name="Nuxtifyts\PhpDto\Support\Pipeline" namespace="Nuxtifyts\PhpDto\Support">
-          <metrics complexity="4" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" elements="9" coveredelements="9"/>
-        </class>
-        <line num="18" type="method" name="__construct" visibility="public" complexity="1" crap="1" count="29"/>
-        <line num="21" type="stmt" count="29"/>
-        <line num="26" type="method" name="through" visibility="public" complexity="1" crap="1" count="29"/>
-        <line num="28" type="stmt" count="29"/>
-        <line num="30" type="stmt" count="29"/>
-        <line num="38" type="method" name="sendThenReturn" visibility="public" complexity="2" crap="2" count="29"/>
-        <line num="40" type="stmt" count="29"/>
-        <line num="41" type="stmt" count="29"/>
-        <line num="44" type="stmt" count="29"/>
-        <metrics loc="47" ncloc="30" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" elements="9" coveredelements="9"/>
-      </file>
-      <file name="/Users/faroukbraik/Dev/php-dto/src/Support/Str.php">
-        <class name="Nuxtifyts\PhpDto\Support\Str" namespace="Nuxtifyts\PhpDto\Support">
-          <metrics complexity="25" methods="12" coveredmethods="12" conditionals="0" coveredconditionals="0" statements="26" coveredstatements="26" elements="38" coveredelements="38"/>
-        </class>
-        <line num="9" type="method" name="validateLetterCase" visibility="public" complexity="5" crap="5" count="8"/>
-        <line num="12" type="stmt" count="8"/>
-        <line num="13" type="stmt" count="6"/>
-        <line num="14" type="stmt" count="4"/>
-        <line num="15" type="stmt" count="8"/>
-        <line num="19" type="method" name="isCamelCase" visibility="public" complexity="1" crap="1" count="6"/>
-        <line num="21" type="stmt" count="6"/>
-        <line num="24" type="method" name="isSnakeCase" visibility="public" complexity="1" crap="1" count="6"/>
-        <line num="26" type="stmt" count="6"/>
-        <line num="29" type="method" name="isKebabCase" visibility="public" complexity="1" crap="1" count="6"/>
-        <line num="31" type="stmt" count="6"/>
-        <line num="34" type="method" name="isPascalCase" visibility="public" complexity="1" crap="1" count="6"/>
-        <line num="36" type="stmt" count="6"/>
-        <line num="39" type="method" name="transformLetterCase" visibility="public" complexity="10" crap="10" count="8"/>
-        <line num="44" type="stmt" count="8"/>
-        <line num="45" type="stmt" count="1"/>
-        <line num="48" type="stmt" count="7"/>
-        <line num="49" type="stmt" count="7"/>
-        <line num="50" type="stmt" count="5"/>
-        <line num="51" type="stmt" count="3"/>
-        <line num="52" type="stmt" count="1"/>
-        <line num="53" type="stmt" count="7"/>
-        <line num="56" type="stmt" count="7"/>
-        <line num="57" type="stmt" count="5"/>
-        <line num="58" type="stmt" count="3"/>
-        <line num="59" type="stmt" count="7"/>
-        <line num="63" type="method" name="camelToSnake" visibility="public" complexity="1" crap="1" count="2"/>
-        <line num="65" type="stmt" count="2"/>
-        <line num="68" type="method" name="snakeToCamel" visibility="public" complexity="1" crap="1" count="3"/>
-        <line num="70" type="stmt" count="3"/>
-        <line num="73" type="method" name="kebabToCamel" visibility="public" complexity="1" crap="1" count="2"/>
-        <line num="75" type="stmt" count="2"/>
-        <line num="78" type="method" name="pascalToSnake" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="80" type="stmt" count="1"/>
-        <line num="83" type="method" name="snakeToPascal" visibility="public" complexity="1" crap="1" count="2"/>
-        <line num="85" type="stmt" count="2"/>
-        <line num="88" type="method" name="camelToKebab" visibility="public" complexity="1" crap="1" count="1"/>
-        <line num="90" type="stmt" count="1"/>
-        <metrics loc="93" ncloc="93" classes="1" methods="12" coveredmethods="12" conditionals="0" coveredconditionals="0" statements="26" coveredstatements="26" elements="38" coveredelements="38"/>
-      </file>
-    </package>
-    <metrics files="74" loc="3976" ncloc="3374" classes="60" methods="165" coveredmethods="135" conditionals="0" coveredconditionals="0" statements="1038" coveredstatements="953" elements="1203" coveredelements="1088"/>
-  </project>
-</coverage>
diff --git a/composer.json b/composer.json
index a09f12f..0a5b607 100644
--- a/composer.json
+++ b/composer.json
@@ -28,7 +28,8 @@
         }
     },
     "scripts": {
-        "ci-test": "XDEBUG_MODE=coverage vendor/bin/phpunit --testsuite=ci --configuration phpunit.xml",
+        "ci-test": "XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-text --testsuite=ci --configuration phpunit.xml",
+        "unit-test": "XDEBUG_MODE=coverage vendor/bin/phpunit --testsuite=unit --configuration phpunit.xml",
         "phpstan": "vendor/bin/phpstan analyse --configuration phpstan.neon --memory-limit=256M"
     }
 }
diff --git a/docs/DataConfiguration.md b/docs/DataConfiguration.md
index 2e73108..498756d 100644
--- a/docs/DataConfiguration.md
+++ b/docs/DataConfiguration.md
@@ -38,6 +38,6 @@ DataConfiguration::getInstance([
             BackedEnumSerializer::class,
             ScalarTypeSerializer::class,
         ]
-    ]
+    ],
 ])
 ```
diff --git a/src/Concerns/BaseData.php b/src/Concerns/BaseData.php
index 2e9b0d1..7d42eeb 100644
--- a/src/Concerns/BaseData.php
+++ b/src/Concerns/BaseData.php
@@ -9,7 +9,6 @@
 use Nuxtifyts\PhpDto\Normalizers\Concerns\HasNormalizers;
 use Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\DeserializePipeline;
 use Nuxtifyts\PhpDto\Pipelines\DeserializePipeline\DeserializePipelinePassable;
-use ReflectionClass;
 use Throwable;
 
 trait BaseData
diff --git a/src/Configuration/DataConfiguration.php b/src/Configuration/DataConfiguration.php
index cfc2046..3fd2221 100644
--- a/src/Configuration/DataConfiguration.php
+++ b/src/Configuration/DataConfiguration.php
@@ -36,7 +36,7 @@ public static function getInstance(
             serializers: SerializersConfiguration::getInstance(
                 Arr::getArray($config ?? [], 'serializers'),
                 $forceCreate
-            )
+            ),
         );
     }
 }
diff --git a/src/Support/Arr.php b/src/Support/Arr.php
index 0a83032..9bada21 100644
--- a/src/Support/Arr.php
+++ b/src/Support/Arr.php
@@ -2,11 +2,13 @@
 
 namespace Nuxtifyts\PhpDto\Support;
 
+use BackedEnum;
+use InvalidArgumentException;
+
 final readonly class Arr
 {
     /**
      * @param array<array-key, mixed> $array
-     * @param string $key
      * @param array<array-key, mixed> $default
      *
      * @return array<array-key, mixed>
@@ -30,4 +32,165 @@ public static function isArrayOfClassStrings(array $array, string $classString):
                 && is_subclass_of($value, $classString)
         );
     }
+
+    /**
+     *  @param array<array-key, mixed> $array
+     */
+    public static function getStringOrNull(array $array, string $key): ?string
+    {
+        $value = $array[$key] ?? null;
+
+        return is_string($value) ? $value : null;
+    }
+
+    /**
+     * @param array<array-key, mixed> $array
+     */
+    public static function getString(array $array, string $key, string $default = ''): string
+    {
+        return self::getStringOrNull($array, $key) ?? $default;
+    }
+
+    /**
+     * @param array<array-key, mixed> $array
+     */
+    public static function getIntegerOrNull(array $array, string $key): ?int
+    {
+        $value = $array[$key] ?? null;
+
+        return is_int($value) ? $value : null;
+    }
+
+    /**
+     * @param array<array-key, mixed> $array
+     */
+    public static function getInteger(array $array, string $key, int $default = 0): int
+    {
+        return self::getIntegerOrNull($array, $key) ?? $default;
+    }
+
+    /**
+     * @param array<array-key, mixed> $array
+     */
+    public static function getFloatOrNull(array $array, string $key): ?float
+    {
+        $value = $array[$key] ?? null;
+
+        return is_float($value) ? $value : null;
+    }
+
+    /**
+     * @param array<array-key, mixed> $array
+     */
+    public static function getFloat(array $array, string $key, float $default = 0.0): float
+    {
+        return self::getFloatOrNull($array, $key) ?? $default;
+    }
+
+    /**
+     * @param array<array-key, mixed> $array
+     */
+    public static function getBooleanOrNull(array $array, string $key): ?bool
+    {
+        $value = $array[$key] ?? null;
+
+        return is_bool($value) ? $value : null;
+    }
+
+    /**
+     * @param array<array-key, mixed> $array
+     */
+    public static function getBoolean(array $array, string $key, bool $default = false): bool
+    {
+        return self::getBooleanOrNull($array, $key) ?? $default;
+    }
+
+    /**
+     * @template T of BackedEnum
+     *
+     * @param array<array-key, mixed> $array
+     * @param class-string<T> $enumClass
+     * @param ?T $default
+     *
+     * @return ?T
+     */
+    public static function getBackedEnumOrNull(
+        array $array,
+        string $key,
+        string $enumClass,
+        ?BackedEnum $default = null
+    ): ?BackedEnum {
+        $value = $array[$key] ?? null;
+
+        if ($value instanceof $enumClass) {
+            return $value;
+        } else if (
+            (is_string($value) || is_integer($value))
+            && $resolvedValue = $enumClass::tryFrom($value)
+        ) {
+            return $resolvedValue;
+        }
+
+        return is_null($default)
+            ? null
+            : ($default instanceof $enumClass
+                ? $default
+                : throw new InvalidArgumentException('Default value must be an instance of ' . $enumClass)
+            );
+    }
+
+    /**
+     * @template T of BackedEnum
+     *
+     * @param array<array-key, mixed> $array
+     * @param class-string<T> $enumClass
+     * @param T $default
+     *
+     * @return T
+     */
+    public static function getBackedEnum(
+        array $array,
+        string $key,
+        string $enumClass,
+        BackedEnum $default
+    ): BackedEnum {
+        return self::getBackedEnumOrNull($array, $key, $enumClass, $default) ?? $default;
+    }
+
+
+    /**
+     * @param array<array-key, mixed> $array
+     *
+     * @return ($preserveKeys is true ? array<array-key, mixed> : list<mixed>)
+     */
+    public static function flatten(array $array, float $depth = INF, bool $preserveKeys = true): array
+    {
+        $result = [];
+
+        foreach ($array as $key => $item) {
+            $item = $item instanceof Collection ? $item->all() : $item;
+
+            if (! is_array($item)) {
+                if ($preserveKeys) {
+                    $result[$key] = $item;
+                } else {
+                    $result[] = $item;
+                }
+            } else {
+                $values = $depth === 1.0
+                    ? $item
+                    : self::flatten($item, $depth - 1, $preserveKeys);
+
+                foreach ($values as $subKey => $value) {
+                    if ($preserveKeys) {
+                        $result[$subKey] = $value;
+                    } else {
+                        $result[] = $value;
+                    }
+                }
+            }
+        }
+
+        return $result;
+    }
 }
diff --git a/src/Support/Collection.php b/src/Support/Collection.php
new file mode 100644
index 0000000..47369c1
--- /dev/null
+++ b/src/Support/Collection.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace Nuxtifyts\PhpDto\Support;
+
+/**
+ * @template TKey of array-key
+ * @template TValue of mixed
+ */
+class Collection
+{
+    /** @var array<TKey, TValue> */
+    protected array $items = [];
+
+    /**
+     * @param array<TKey, TValue> $items
+     */
+    public function __construct(array $items = [])
+    {
+        $this->items = $items;
+    }
+
+    /**
+     * @param TValue $item
+     *
+     * @return self<TKey, TValue>
+     */
+    public function push(mixed $item): self
+    {
+        $this->items[] = $item;
+        return $this;
+    }
+
+    /**
+     * @param TKey $key
+     * @param TValue $value
+     *
+     * @return self<TKey, TValue>
+     */
+    public function put(mixed $key, mixed $value): self
+    {
+        $this->items[$key] = $value;
+        return $this;
+    }
+
+    /**
+     * @param ?callable(TValue $item): bool $callable
+     *
+     * @return ?TValue
+     */
+    public function first(?callable $callable = null): mixed
+    {
+        return is_null($callable)
+            ? reset($this->items) ?: null
+            : array_find($this->items, $callable);
+    }
+
+    /**
+     * @template TNewValue of mixed
+     * @param callable(TValue $item): TNewValue $callable
+     *
+     * @return self<TKey, TNewValue>
+     */
+    public function map(callable $callable): self
+    {
+        return new self(array_map($callable, $this->items));
+    }
+
+    /**
+     * @return ($preserveKeys is true ? Collection<array-key, mixed> : Collection<int, mixed>)
+     */
+    public function collapse(bool $preserveKeys = false): self
+    {
+        return $this->flatten(1, $preserveKeys);
+    }
+
+    /**
+     * @return ($preserveKeys is true ? Collection<array-key, mixed> : Collection<int, mixed>)
+     */
+    public function flatten(float $depth = INF, bool $preserveKeys = true): self
+    {
+        return new self(Arr::flatten($this->items, $depth, $preserveKeys));
+    }
+
+    public function isNotEmpty(): bool
+    {
+        return !empty($this->items);
+    }
+
+    public function isEmpty(): bool
+    {
+        return !$this->isNotEmpty();
+    }
+
+    /**
+     * @param callable(TValue $item): bool $callable
+     */
+    public function every(callable $callable): bool
+    {
+        return array_all($this->items, $callable);
+    }
+
+    /**
+     * @param callable(TValue $item): bool $callable
+     */
+    public function some(callable $callable): bool
+    {
+        return array_any($this->items, $callable);
+    }
+
+    /**
+     * @return array<TKey, TValue>
+     */
+    public function all(): array
+    {
+        return $this->items;
+    }
+}
diff --git a/tests/Unit/Support/ArrTest.php b/tests/Unit/Support/ArrTest.php
index 633b923..59f77d6 100644
--- a/tests/Unit/Support/ArrTest.php
+++ b/tests/Unit/Support/ArrTest.php
@@ -2,16 +2,22 @@
 
 namespace Nuxtifyts\PhpDto\Tests\Unit\Support;
 
-use Nuxtifyts\PhpDto\Serializers\BackedEnumSerializer;
-use Nuxtifyts\PhpDto\Serializers\ScalarTypeSerializer;
-use Nuxtifyts\PhpDto\Serializers\Serializer;
+use InvalidArgumentException;
 use Nuxtifyts\PhpDto\Support\Arr;
+use PHPUnit\Framework\Attributes\Test;
 use Nuxtifyts\PhpDto\Tests\Unit\UnitCase;
+use PHPUnit\Framework\Attributes\UsesClass;
+use Nuxtifyts\PhpDto\Serializers\Serializer;
 use PHPUnit\Framework\Attributes\CoversClass;
 use PHPUnit\Framework\Attributes\DataProvider;
-use PHPUnit\Framework\Attributes\Test;
+use Nuxtifyts\PhpDto\Serializers\BackedEnumSerializer;
+use Nuxtifyts\PhpDto\Serializers\ScalarTypeSerializer;
+use Nuxtifyts\PhpDto\Tests\Dummies\Enums\YesNoBackedEnum;
+use Nuxtifyts\PhpDto\Tests\Dummies\Enums\ColorsBackedEnum;
 
 #[CoversClass(Arr::class)]
+#[UsesClass(YesNoBackedEnum::class)]
+#[UsesClass(ColorsBackedEnum::class)]
 final class ArrTest extends UnitCase
 {
     /**
@@ -20,6 +26,7 @@ final class ArrTest extends UnitCase
     #[Test]
     #[DataProvider('get_arr_provider')]
     #[DataProvider('is_array_of_class_strings_provider')]
+    #[DataProvider('flatten_provider')]
     public function arr_helper_functions(
         string $functionName,
         array $parameters,
@@ -62,9 +69,281 @@ public static function get_arr_provider(): array
                 ],
                 [],
             ],
+            'get string existing key, invalid value' => [
+                'getString',
+                [
+                    'array' => ['key' => 1],
+                    'key' => 'key',
+                ],
+                '',
+            ],
+            'get string existing key, valid value' => [
+                'getString',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                'value',
+            ],
+            'get string non-existing key' => [
+                'getString',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'nonExistingKey',
+                ],
+                '',
+            ],
+            'get string or null existing key, invalid value' => [
+                'getStringOrNull',
+                [
+                    'array' => ['key' => 1],
+                    'key' => 'key',
+                ],
+                null,
+            ],
+            'get string or null existing key, valid value' => [
+                'getStringOrNull',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                'value',
+            ],
+            'get string or null non-existing key' => [
+                'getStringOrNull',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'nonExistingKey',
+                ],
+                null,
+            ],
+            'get integer existing key, invalid value' => [
+                'getInteger',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                0,
+            ],
+            'get integer existing key, valid value' => [
+                'getInteger',
+                [
+                    'array' => ['key' => 1],
+                    'key' => 'key',
+                ],
+                1,
+            ],
+            'get integer non-existing key' => [
+                'getInteger',
+                [
+                    'array' => ['key' => 1],
+                    'key' => 'nonExistingKey',
+                ],
+                0,
+            ],
+            'get integer or null existing key, invalid value' => [
+                'getIntegerOrNull',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                null,
+            ],
+            'get integer or null existing key, valid value' => [
+                'getIntegerOrNull',
+                [
+                    'array' => ['key' => 1],
+                    'key' => 'key',
+                ],
+                1,
+            ],
+            'get integer or null non-existing key' => [
+                'getIntegerOrNull',
+                [
+                    'array' => ['key' => 1],
+                    'key' => 'nonExistingKey',
+                ],
+                null,
+            ],
+            'get float existing key, invalid value' => [
+                'getFloat',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                0.0,
+            ],
+            'get float existing key, valid value' => [
+                'getFloat',
+                [
+                    'array' => ['key' => 1.1],
+                    'key' => 'key',
+                ],
+                1.1,
+            ],
+            'get float non-existing key' => [
+                'getFloat',
+                [
+                    'array' => ['key' => 1.1],
+                    'key' => 'nonExistingKey',
+                ],
+                0.0,
+            ],
+            'get float or null existing key, invalid value' => [
+                'getFloatOrNull',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                null,
+            ],
+            'get float or null existing key, valid value' => [
+                'getFloatOrNull',
+                [
+                    'array' => ['key' => 1.1],
+                    'key' => 'key',
+                ],
+                1.1,
+            ],
+            'get float or null non-existing key' => [
+                'getFloatOrNull',
+                [
+                    'array' => ['key' => 1.1],
+                    'key' => 'nonExistingKey',
+                ],
+                null,
+            ],
+            'get boolean existing key, invalid value' => [
+                'getBoolean',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                false,
+            ],
+            'get boolean existing key, valid value' => [
+                'getBoolean',
+                [
+                    'array' => ['key' => true],
+                    'key' => 'key',
+                ],
+                true,
+            ],
+            'get boolean non-existing key' => [
+                'getBoolean',
+                [
+                    'array' => ['key' => true],
+                    'key' => 'nonExistingKey',
+                ],
+                false,
+            ],
+            'get boolean or null existing key, invalid value' => [
+                'getBooleanOrNull',
+                [
+                    'array' => ['key' => 'value'],
+                    'key' => 'key',
+                ],
+                null,
+            ],
+            'get boolean or null existing key, valid value' => [
+                'getBooleanOrNull',
+                [
+                    'array' => ['key' => true],
+                    'key' => 'key',
+                ],
+                true,
+            ],
+            'get boolean or null non-existing key' => [
+                'getBooleanOrNull',
+                [
+                    'array' => ['key' => true],
+                    'key' => 'nonExistingKey',
+                ],
+                null,
+            ],
+            'get backed enum or null, invalid value' => [
+                'getBackedEnumOrNull',
+                [
+                    'array' => ['key' => 'invalid'],
+                    'key' => 'key',
+                    'enumClass' => YesNoBackedEnum::class,
+                ],
+                null
+            ],
+            'get backed enum or null, invalid value default provided' => [
+                'getBackedEnumOrNull',
+                [
+                    'array' => ['key' => 'invalid'],
+                    'key' => 'key',
+                    'enumClass' => YesNoBackedEnum::class,
+                    'default' => YesNoBackedEnum::NO,
+                ],
+                YesNoBackedEnum::NO
+            ],
+            'get backed enum or null, valid backed enum value' => [
+                'getBackedEnumOrNull',
+                [
+                    'array' => ['key' => YesNoBackedEnum::YES],
+                    'key' => 'key',
+                    'enumClass' => YesNoBackedEnum::class,
+                ],
+                YesNoBackedEnum::YES
+            ],
+            'get backed enum or null, valid string value' => [
+                'getBackedEnumOrNull',
+                [
+                    'array' => ['key' => 'yes'],
+                    'key' => 'key',
+                    'enumClass' => YesNoBackedEnum::class,
+                ],
+                YesNoBackedEnum::YES
+            ],
+            'get backed enum, invalid value' => [
+                'getBackedEnum',
+                [
+                    'array' => ['key' => 'invalid'],
+                    'key' => 'key',
+                    'enumClass' => YesNoBackedEnum::class,
+                    'default' => YesNoBackedEnum::NO,
+                ],
+                YesNoBackedEnum::NO
+            ],
+            'get backed enum, valid backed enum value' => [
+                'getBackedEnum',
+                [
+                    'array' => ['key' => YesNoBackedEnum::YES],
+                    'key' => 'key',
+                    'enumClass' => YesNoBackedEnum::class,
+                    'default' => YesNoBackedEnum::NO,
+                ],
+                YesNoBackedEnum::YES
+            ],
+            'get backed enum, valid string value' => [
+                'getBackedEnum',
+                [
+                    'array' => ['key' => 'yes'],
+                    'key' => 'key',
+                    'enumClass' => YesNoBackedEnum::class,
+                    'default' => YesNoBackedEnum::NO,
+                ],
+                YesNoBackedEnum::YES
+            ],
         ];
     }
 
+    #[Test]
+    public function get_backed_enum_or_null_will_throw_an_exception_if_default_value_is_invalid(): void
+    {
+        self::expectException(InvalidArgumentException::class);
+
+        Arr::getBackedEnumOrNull(
+            ['key' => 'invalid'],
+            'key',
+            YesNoBackedEnum::class,
+            ColorsBackedEnum::RED
+        );
+    }
+
     /**
      * @return array<string, mixed>
      */
@@ -96,4 +375,124 @@ public static function is_array_of_class_strings_provider(): array
             ],
         ];
     }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function flatten_provider(): array
+    {
+        return [
+            'flatten, empty array' => [
+                'flatten',
+                [
+                    'array' => [],
+                ],
+                []
+            ],
+            'flatten array, one depth' => [
+                'flatten',
+                [
+                    'array' => [
+                        'a' => [
+                            'a1' => 1.1,
+                            'a2' => 1.2
+                        ],
+                        'b' => 2,
+                    ],
+                ],
+                [
+                    'a1' => 1.1,
+                    'a2' => 1.2,
+                    'b' => 2
+                ]
+            ],
+            'flatten array, multiple depths' => [
+                'flatten',
+                [
+                    'array' => [
+                        'a' => [
+                            'a1' => [
+                                'a1.1' => 1.1,
+                                'a1.2' => 1.2
+                            ],
+                            'a2' => 2
+                        ],
+                        'b' => 3,
+                    ],
+                ],
+                [
+                    'a1.1' => 1.1,
+                    'a1.2' => 1.2,
+                    'a2' => 2,
+                    'b' => 3
+                ]
+            ],
+            'flatten array, and resets array keys' => [
+                'flatten',
+                [
+                    'array' => [
+                        'a' => [
+                            'a1' => 1.1,
+                            'a2' => 1.2
+                        ],
+                        'b' => 2,
+                    ],
+                    'depth' => 1.0,
+                    'preserveKeys' => false,
+                ],
+                [
+                    1.1,
+                    1.2,
+                    2
+                ]
+            ],
+            'flatten array, and resets array keys, multiple depths' => [
+                'flatten',
+                [
+                    'array' => [
+                        'a' => [
+                            'a1' => [
+                                'a1.1' => 1.1,
+                                'a1.2' => 1.2
+                            ],
+                            'a2' => 2
+                        ],
+                        'b' => 3,
+                    ],
+                    'preserveKeys' => false,
+                ],
+                [
+                    1.1,
+                    1.2,
+                    2,
+                    3
+                ]
+            ],
+            'flatten array, one depth, not enough' => [
+                'flatten',
+                [
+                    'array' => [
+                        'a' => [
+                            'a1' => [
+                                'a1.1' => 1.1,
+                                'a1.2' => 1.2
+                            ],
+                            'a2' => 2
+                        ],
+                        'b' => 3,
+                    ],
+                    'depth' => 1,
+                    'preserveKeys' => false,
+                ],
+                [
+                    [
+                        'a1.1' => 1.1,
+                        'a1.2' => 1.2
+                    ],
+                    2,
+                    3
+                ]
+            ]
+        ];
+    }
 }
diff --git a/tests/Unit/Support/CollectionTest.php b/tests/Unit/Support/CollectionTest.php
new file mode 100644
index 0000000..9039364
--- /dev/null
+++ b/tests/Unit/Support/CollectionTest.php
@@ -0,0 +1,238 @@
+<?php
+
+namespace Nuxtifyts\PhpDto\Tests\Unit\Support;
+
+use Nuxtifyts\PhpDto\Support\Collection;
+use Nuxtifyts\PhpDto\Tests\Unit\UnitCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
+
+#[CoversClass(Collection::class)]
+final class CollectionTest extends UnitCase
+{
+    /**
+     * @param Collection<array-key, mixed> $collection
+     * @param array<string, mixed> $functionParams
+     */
+    #[Test]
+    #[DataProvider('push_function_provider')]
+    #[DataProvider('put_function_provider')]
+    #[DataProvider('first_function_provider')]
+    #[DataProvider('map_function_provider')]
+    #[DataProvider('collapse_function_provider')]
+    #[DataProvider('flatten_function_provider')]
+    #[DataProvider('all_function_provider')]
+    #[DataProvider('validation_functions_provider')]
+    public function will_be_able_to_perform_functions(
+        Collection $collection,
+        string $functionName,
+        array $functionParams,
+        mixed $expected
+    ): void {
+        $result = $collection->{$functionName}(...$functionParams);
+
+        if ($expected instanceof Collection) {
+            self::assertInstanceOf(Collection::class, $result);
+            self::assertCollection($result, $expected);
+        } else {
+            self::assertEquals($expected, $result);
+        }
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function push_function_provider(): array
+    {
+        return [
+            'push' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'push',
+                'functionParams' => [ 'item' => 4 ],
+                'expected' => new Collection([1, 2, 3, 4])
+            ]
+        ];
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function put_function_provider(): array
+    {
+        return [
+            'put in new key' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'put',
+                'functionParams' => [ 'key' => 3, 'value' => 4 ],
+                'expected' => new Collection([1, 2, 3, 4])
+            ],
+            'put in existing key will override value' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'put',
+                'functionParams' => [ 'key' => 0, 'value' => 4 ],
+                'expected' => new Collection([4, 2, 3])
+            ]
+        ];
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function first_function_provider(): array
+    {
+        return [
+            'first without callable and non empty collection' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'first',
+                'functionParams' => [],
+                'expected' => 1
+            ],
+            'first without callable and empty collection' => [
+                'collection' => new Collection([]),
+                'functionName' => 'first',
+                'functionParams' => [],
+                'expected' => null
+            ],
+            'first with callable and existing item that will meet requirements' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'first',
+                'functionParams' => [ 'callable' => static fn (int $item) => $item === 2 ],
+                'expected' => 2
+            ],
+            'first with callable and no item that will meet requirements' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'first',
+                'functionParams' => [ 'callable' => static fn (int $item) => $item === 4 ],
+                'expected' => null
+            ]
+        ];
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function map_function_provider(): array
+    {
+        return [
+            'map' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'map',
+                'functionParams' => [ 'callable' => static fn (int $item) => $item * 2 ],
+                'expected' => new Collection([2, 4, 6])
+            ]
+        ];
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function collapse_function_provider(): array
+    {
+        return [
+            'collapse' => [
+                'collection' => new Collection([
+                    new Collection([ 'a' => 1, 2, 3]),
+                    new Collection([4, 5, 6]),
+                    new Collection([7, 8, 9])
+                ]),
+                'functionName' => 'collapse',
+                'functionParams' => [],
+                'expected' => new Collection([1, 2, 3, 4, 5, 6, 7, 8, 9])
+            ],
+
+        ];
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function flatten_function_provider(): array
+    {
+        return [
+            'flatten' => [
+                'collection' => new Collection([
+                    'a1' => new Collection([
+                        'a1.1' => 1.1,
+                        'a1.2' => new Collection([
+                            'a1.2.1' => 1.21,
+                            'a1.2.2' => 1.22,
+                            'a1.2.3' => new Collection([
+                                'a1.2.3.1' => 1.231,
+                                'a1.2.3.2' => 1.232,
+                                'a1.2.3.3' => 1.233
+                            ])
+                        ])
+                    ])
+                ]),
+                'functionName' => 'flatten',
+                'functionParams' => [],
+                'expected' => new Collection([
+                    'a1.1' => 1.1,
+                    'a1.2.1' => 1.21,
+                    'a1.2.2' => 1.22,
+                    'a1.2.3.1' => 1.231,
+                    'a1.2.3.2' => 1.232,
+                    'a1.2.3.3' => 1.233
+                ])
+            ]
+        ];
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function all_function_provider(): array
+    {
+        return [
+            'all' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'all',
+                'functionParams' => [],
+                'expected' => [1, 2, 3]
+            ]
+        ];
+    }
+
+    /**
+     * @return array<string, mixed>
+     */
+    public static function validation_functions_provider(): array
+    {
+        return [
+            'isEmpty' => [
+                'collection' => new Collection([]),
+                'functionName' => 'isEmpty',
+                'functionParams' => [],
+                'expected' => true
+            ],
+            'isNotEmpty' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'isNotEmpty',
+                'functionParams' => [],
+                'expected' => true
+            ],
+            'every' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'every',
+                'functionParams' => [ 'callable' => static fn (int $item) => $item > 0 ],
+                'expected' => true
+            ],
+            'some' => [
+                'collection' => new Collection([1, 2, 3]),
+                'functionName' => 'some',
+                'functionParams' => [ 'callable' => static fn (int $item) => $item === 2 ],
+                'expected' => true
+            ],
+        ];
+    }
+
+    /**
+     * @param Collection<array-key, mixed> $collection
+     * @param Collection<array-key, mixed> $expected
+     */
+    private static function assertCollection(Collection $collection, Collection $expected): void
+    {
+        self::assertEquals($expected->all(), $collection->all());
+    }
+}