@@ 107-127 (lines=21) @@ | ||
104 | * |
|
105 | * @return \Closure |
|
106 | */ |
|
107 | private function createReadingDelegate() |
|
108 | { |
|
109 | return $this->readDelegate ?: $this->readDelegate = function ($property, PropertyAccessor $propertyAccessor) { |
|
110 | switch (true) { |
|
111 | ||
112 | // Public property / accessor case |
|
113 | case $propertyAccessor->isReadable($this, $property) : |
|
114 | return $propertyAccessor->getValue($this, $property); |
|
115 | ||
116 | // Private property / StdClass |
|
117 | case property_exists($this, $property) || $this instanceof \StdClass: |
|
118 | return $this->$property; |
|
119 | } |
|
120 | ||
121 | throw new InvalidScopeException(sprintf( |
|
122 | 'Unable to read "%s" property from a "%s" object, any existing property path to read it in.', |
|
123 | $property, |
|
124 | get_class($this) |
|
125 | )); |
|
126 | }; |
|
127 | } |
|
128 | ||
129 | /** |
|
130 | * Normalize given object using given scope. |
|
@@ 268-288 (lines=21) @@ | ||
265 | * |
|
266 | * @return \Closure |
|
267 | */ |
|
268 | private function createWrittingDelegate() |
|
269 | { |
|
270 | return $this->writeDelegate ?: $this->writeDelegate = function (PropertyPathInterface $property, $value, PropertyAccessor $propertyAccessor) { |
|
271 | switch (true) { |
|
272 | ||
273 | // Public property / accessor case |
|
274 | case $propertyAccessor->isWritable($this, $property) : |
|
275 | return $propertyAccessor->setValue($this, $property, $value); |
|
276 | ||
277 | // Private property / StdClass |
|
278 | case property_exists($this, $property) || $this instanceof \StdClass : |
|
279 | return $this->$property = $value; |
|
280 | } |
|
281 | ||
282 | throw new InvalidScopeException(sprintf( |
|
283 | 'Unable to set "%s" property into a "%s" object, any existing property path to write it in.', |
|
284 | $property, |
|
285 | get_class($this) |
|
286 | )); |
|
287 | }; |
|
288 | } |
|
289 | ||
290 | /** |
|
291 | * Denormalize given object data into given normalizable object or class |