1616 LocalDateTime ,
1717 Duration ,
1818 Point2D ,
19- Point3D
19+ Point3D ,
20+ Bytes
2021};
2122use Bolt \PackStream \IUnpacker ;
2223use Bolt \error \UnpackException ;
@@ -130,6 +131,10 @@ private function u()
130131 if ($ output !== null ) {
131132 return $ output ;
132133 }
134+ $ output = $ this ->unpackByteArray ($ marker );
135+ if ($ output !== null ) {
136+ return $ output ;
137+ }
133138
134139 return null ;
135140 }
@@ -186,7 +191,7 @@ private function unpackSpecificStructure(string $class, string ...$methods): ISt
186191
187192 /**
188193 * @param int $marker
189- * @return array
194+ * @return array|null
190195 * @throws UnpackException
191196 */
192197 private function unpackMap (int $ marker ): ?array
@@ -212,7 +217,7 @@ private function unpackMap(int $marker): ?array
212217
213218 /**
214219 * @param int $marker
215- * @return string
220+ * @return string|null
216221 */
217222 private function unpackString (int $ marker ): ?string
218223 {
@@ -233,7 +238,7 @@ private function unpackString(int $marker): ?string
233238
234239 /**
235240 * @param int $marker
236- * @return int
241+ * @return int|null
237242 */
238243 private function unpackInteger (int $ marker ): ?int
239244 {
@@ -257,7 +262,7 @@ private function unpackInteger(int $marker): ?int
257262
258263 /**
259264 * @param int $marker
260- * @return float
265+ * @return float|null
261266 */
262267 private function unpackFloat (int $ marker ): ?float
263268 {
@@ -271,7 +276,7 @@ private function unpackFloat(int $marker): ?float
271276
272277 /**
273278 * @param int $marker
274- * @return array
279+ * @return array|null
275280 * @throws UnpackException
276281 */
277282 private function unpackList (int $ marker ): ?array
@@ -296,4 +301,23 @@ private function unpackList(int $marker): ?array
296301 return $ output ;
297302 }
298303
304+ /**
305+ * @param int $marker
306+ * @return Bytes|null
307+ */
308+ private function unpackByteArray (int $ marker ): ?Bytes
309+ {
310+ if ($ marker == 0xCC ) {
311+ $ size = (int )unpack ('C ' , $ this ->next (1 ))[1 ];
312+ } elseif ($ marker == 0xCD ) {
313+ $ size = (int )unpack ('n ' , $ this ->next (2 ))[1 ];
314+ } elseif ($ marker == 0xCE ) {
315+ $ size = (int )unpack ('N ' , $ this ->next (4 ))[1 ];
316+ } else {
317+ return null ;
318+ }
319+
320+ return new Bytes (mb_str_split ($ this ->next ($ size ), 1 , '8bit ' ));
321+ }
322+
299323}
0 commit comments