1919-define (TTB_PREFIX , 131 ).
2020
2121-define (NEW_PID_EXT , 88 ).
22+ -define (PID_EXT , 103 ).
2223-define (ATOM_UTF8_EXT , 118 ).
2324-define (SMALL_ATOM_UTF8_EXT , 119 ).
2425
@@ -32,14 +33,26 @@ decompose(Pid) ->
3233
3334-spec from_binary (binary ()) -> #{atom () => any ()}.
3435from_binary (Bin ) ->
35- <<? TTB_PREFIX , ? NEW_PID_EXT , PidData /binary >> = Bin ,
36+ PidData = case Bin of
37+ % % Erlang 23+
38+ <<? TTB_PREFIX , ? NEW_PID_EXT , Val0 /binary >> -> Val0 ;
39+ % % Erlang 22
40+ <<? TTB_PREFIX , ? PID_EXT , Val1 /binary >> -> Val1
41+ end ,
3642 {Node , Rest2 } = case PidData of
3743 <<? ATOM_UTF8_EXT , AtomLen :16 /integer , Node0 :AtomLen /binary , Rest1 /binary >> ->
3844 {Node0 , Rest1 };
3945 <<? SMALL_ATOM_UTF8_EXT , AtomLen /integer , Node0 :AtomLen /binary , Rest1 /binary >> ->
4046 {Node0 , Rest1 }
4147 end ,
42- <<ID :32 /integer , Serial :32 /integer , Creation :32 /integer >> = Rest2 ,
48+ {ID , Serial , Creation } = case Rest2 of
49+ % % NEW_PID_EXT on Erlang 23+
50+ <<ID0 :32 /integer , Serial0 :32 /integer , Creation0 :32 /integer >> ->
51+ {ID0 , Serial0 , Creation0 };
52+ % % PID_EXT on Erlang 22
53+ <<ID1 :32 /integer , Serial1 :32 /integer , Creation1 :8 /integer >> ->
54+ {ID1 , Serial1 , Creation1 }
55+ end ,
4356 #{
4457 node => binary_to_atom (Node , utf8 ),
4558 id => ID ,
0 commit comments