@@ -9,34 +9,45 @@ 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 }
1919
2020 return new SpanContext (
21- $ this ->convertInt64 ($ elements [0 ]),
22- $ this ->convertInt64 ($ elements [1 ]),
23- $ this ->convertInt64 ($ elements [2 ]),
24- $ this ->convertInt64 ($ elements [3 ])
21+ ... $ this ->convertInt128 ($ elements [0 ]),
22+ $ this ->convertInt64 ($ elements [1 ]),
23+ $ this ->convertInt64 ($ elements [2 ]),
24+ $ this ->convertInt64 ($ elements [3 ])
2525 );
2626 }
2727
2828 public function convertInt64 (string $ hex ): int
2929 {
30- $ hex8byte = str_pad ($ hex , 16 , '0 ' , STR_PAD_LEFT );
30+ $ hex8byte = \ str_pad ($ hex , 16 , '0 ' , STR_PAD_LEFT );
3131
32- return unpack ('Jint64 ' , pack ('H* ' , $ hex8byte ))['int64 ' ];
32+ return \ unpack ('Jint64 ' , pack ('H* ' , $ hex8byte ))['int64 ' ];
3333 }
3434
35- public function encode ( SpanContext $ context )
35+ public function convertInt128 ( string $ hex ): array
3636 {
37- return sprintf (
38- '%x:%x:%x:%x ' ,
39- $ context ->getTraceId (),
37+ $ hex16byte = \str_pad ($ hex , 32 , '0 ' , STR_PAD_LEFT );
38+
39+ return [
40+ $ this ->convertInt64 (substr ($ hex16byte , 0 , 16 )),
41+ $ this ->convertInt64 (substr ($ hex16byte , 16 , 16 )),
42+ ];
43+ }
44+
45+ public function encode (SpanContext $ context ): string
46+ {
47+ return \sprintf (
48+ '%x%x:%x:%x:%x ' ,
49+ $ context ->getTraceIdHigh (),
50+ $ context ->getTraceIdLow (),
4051 $ context ->getSpanId (),
4152 $ context ->getParentId (),
4253 $ context ->getFlags ()
0 commit comments