@ -2,22 +2,29 @@
% See the LICENSE file for more information .
- module ( jiffy ) .
- export ( [ decode / 1 , encode / 1 , encode / 2 ] ) .
- export ( [ decode / 1 , decode / 2 , encode/ 1 , encode / 2 ] ) .
- define ( NOT_LOADED , not_loaded ( ? LINE ) ) .
- on_load ( init / 0 ) .
decode ( Data ) when is_binary ( Data ) - >
case nif_decode_init ( Data ) of
decode ( Data ) - >
decode ( Data , [ ] ) .
decode ( Data , Opts ) when is_binary ( Data ) , is_list ( Opts ) - >
case nif_decode_init ( Data , Opts ) of
{ error , _ } = Error - >
throw ( Error ) ;
{ partial , EJson } - >
finish_decode ( EJson ) ;
{ iter , Decoder , Objs , Curr } - >
decode_loop ( Data , Decoder , Objs , Curr ) ;
EJson - >
EJson
end ;
decode ( Data ) when is_list ( Data ) - >
decode ( iolist_to_binary ( Data ) ) .
decode ( Data , Opts ) when is_list ( Data ) - >
decode ( iolist_to_binary ( Data ) , Opts ).
encode ( Data ) - >
@ -96,12 +103,24 @@ init() ->
erlang : load_nif ( filename : join ( PrivDir , " jiffy " ) , 0 ) .
decode_loop ( Data , Decoder , Objs , Curr ) - >
case nif_decode_iter ( Data , Decoder , Objs , Curr ) of
{ error , _ } = Error - >
throw ( Error ) ;
{ partial , EJson } - >
finish_decode ( EJson ) ;
{ iter , NewDecoder , NewObjs , NewCurr } - >
decode_loop ( Data , NewDecoder , NewObjs , NewCurr ) ;
EJson - >
EJson
end .
not_loaded ( Line ) - >
erlang : nif_error ( { not_loaded , [ { module , ? MODULE } , { line , Line } ] } ) .
nif_decode_init ( _ Data ) - >
? NOT_LOADED ,
nif_decode_iter ( w , x , y , z ) .
nif_decode_init ( _ Data , _ Opts ) - >
? NOT_LOADED .
nif_decode_iter ( _ Data , _ Decoder , _ , _ ) - >
? NOT_LOADED .