@@ -9,16 +9,18 @@ class TextCodec implements CodecInterface
99{
1010 public function decode ($ data ): ?SpanContext
1111 {
12- if (false === is_string ($ data )) {
12+ if (false === \ is_string ($ data )) {
1313 return null ;
1414 }
15- $ elements = explode (': ' , $ data );
16- if (4 !== count ($ elements )) {
15+ $ elements = \ explode (': ' , $ data );
16+ if (4 !== \ count ($ elements )) {
1717 return null ;
1818 }
19+ [$ traceIdHigh , $ traceIdLow ] = $ this ->convertInt128 ($ elements [0 ]);
1920
2021 return new SpanContext (
21- $ this ->convertInt64 ($ elements [0 ]),
22+ $ traceIdHigh ,
23+ $ traceIdLow ,
2224 $ this ->convertInt64 ($ elements [1 ]),
2325 $ this ->convertInt64 ($ elements [2 ]),
2426 $ this ->convertInt64 ($ elements [3 ])
@@ -27,16 +29,27 @@ public function decode($data): ?SpanContext
2729
2830 public function convertInt64 (string $ hex ): int
2931 {
30- $ hex8byte = str_pad ($ hex , 16 , '0 ' , STR_PAD_LEFT );
32+ $ hex8byte = \ str_pad ($ hex , 16 , '0 ' , STR_PAD_LEFT );
3133
32- return unpack ('Jint64 ' , pack ('H* ' , $ hex8byte ))['int64 ' ];
34+ return \ unpack ('Jint64 ' , pack ('H* ' , $ hex8byte ))['int64 ' ];
3335 }
3436
35- public function encode ( SpanContext $ context )
37+ public function convertInt128 ( string $ hex ): array
3638 {
37- return sprintf (
38- '%x:%x:%x:%x ' ,
39- $ context ->getTraceId (),
39+ $ hex16byte = \str_pad ($ hex , 32 , '0 ' , STR_PAD_LEFT );
40+
41+ return [
42+ $ this ->convertInt64 (substr ($ hex16byte , 0 , 16 )),
43+ $ this ->convertInt64 (substr ($ hex16byte , 16 , 16 )),
44+ ];
45+ }
46+
47+ public function encode (SpanContext $ context ): string
48+ {
49+ return \sprintf (
50+ '%x%x:%x:%x:%x ' ,
51+ $ context ->getTraceIdHigh (),
52+ $ context ->getTraceIdLow (),
4053 $ context ->getSpanId (),
4154 $ context ->getParentId (),
4255 $ context ->getFlags ()
0 commit comments