33
44namespace JsonApiPhp \JsonApi ;
55
6+ use JsonApiPhp \JsonApi \Document \Container ;
67use JsonApiPhp \JsonApi \Document \Error ;
78use JsonApiPhp \JsonApi \Document \LinksTrait ;
8- use JsonApiPhp \JsonApi \Document \Meta ;
99use JsonApiPhp \JsonApi \Document \MetaTrait ;
1010use JsonApiPhp \JsonApi \Document \PrimaryData \MultiIdentifierData ;
1111use JsonApiPhp \JsonApi \Document \PrimaryData \MultiResourceData ;
1616use JsonApiPhp \JsonApi \Document \Resource \ResourceIdentifier ;
1717use JsonApiPhp \JsonApi \Document \Resource \ResourceObject ;
1818
19- class Document implements \JsonSerializable
19+ final class Document implements \JsonSerializable
2020{
2121 const MEDIA_TYPE = 'application/vnd.api+json ' ;
2222 const DEFAULT_API_VERSION = '1.0 ' ;
@@ -46,7 +46,7 @@ private function __construct()
4646 {
4747 }
4848
49- public static function fromMeta (Meta $ meta ): self
49+ public static function fromMeta (iterable $ meta ): self
5050 {
5151 $ doc = new self ;
5252 $ doc ->setMeta ($ meta );
@@ -100,12 +100,12 @@ public function setApiVersion(string $version = self::DEFAULT_API_VERSION)
100100 $ this ->api ['version ' ] = $ version ;
101101 }
102102
103- public function setApiMeta (Meta $ meta )
103+ public function setApiMeta (iterable $ meta ): void
104104 {
105- $ this ->api ['meta ' ] = $ meta ;
105+ $ this ->api ['meta ' ] = new Container ( $ meta) ;
106106 }
107107
108- public function setIncluded (ResourceObject ...$ resources )
108+ public function setIncluded (ResourceObject ...$ resources ): void
109109 {
110110 if (null === $ this ->data ) {
111111 throw new \LogicException ('Document with no data cannot contain included resources ' );
@@ -118,30 +118,25 @@ public function setIncluded(ResourceObject ...$resources)
118118 }
119119 }
120120
121- public function markSparse ()
121+ public function markSparse (): void
122122 {
123123 $ this ->sparse = true ;
124124 }
125125
126126 public function jsonSerialize ()
127127 {
128128 $ this ->enforceFullLinkage ();
129- return array_filter (
130- [
131- 'data ' => $ this ->data ,
132- 'errors ' => $ this ->errors ,
133- 'meta ' => $ this ->meta ,
134- 'jsonapi ' => $ this ->api ,
135- 'links ' => $ this ->links ,
136- 'included ' => $ this ->included ? array_values ($ this ->included ) : null ,
137- ],
138- function ($ v ) {
139- return null !== $ v ;
140- }
141- );
129+ return filterNulls ([
130+ 'data ' => $ this ->data ,
131+ 'errors ' => $ this ->errors ,
132+ 'meta ' => $ this ->meta ,
133+ 'jsonapi ' => $ this ->api ,
134+ 'links ' => $ this ->links ,
135+ 'included ' => $ this ->included ? array_values ($ this ->included ) : null ,
136+ ]);
142137 }
143138
144- private function enforceFullLinkage ()
139+ private function enforceFullLinkage (): void
145140 {
146141 if ($ this ->sparse || empty ($ this ->included )) {
147142 return ;
0 commit comments