diff --git a/c_src/decoder.c b/c_src/decoder.c index 12debb6..d5f0822 100644 --- a/c_src/decoder.c +++ b/c_src/decoder.c @@ -65,6 +65,20 @@ typedef struct { int st_top; } Decoder; +Decoder* dec_new(ErlNifEnv* env); +void dec_init(Decoder* d, ErlNifEnv* env, ERL_NIF_TERM arg, ErlNifBinary* bin); +ERL_NIF_TERM dec_error(Decoder* d, const char* atom); +char dec_curr(Decoder* d); +int dec_top(Decoder* d); +void dec_push(Decoder* d, char val); +void dec_pop(Decoder* d, char val); +int dec_string(Decoder* d, ERL_NIF_TERM* value); +int dec_number(Decoder* d, ERL_NIF_TERM* value); +ERL_NIF_TERM make_empty_object(ErlNifEnv* env, int ret_map); +int make_object(ErlNifEnv* env, ERL_NIF_TERM pairs, ERL_NIF_TERM* out, int ret_map); +ERL_NIF_TERM make_array(ErlNifEnv* env, ERL_NIF_TERM list); + + Decoder* dec_new(ErlNifEnv* env) { diff --git a/c_src/encoder.c b/c_src/encoder.c index 4a96048..33d619c 100644 --- a/c_src/encoder.c +++ b/c_src/encoder.c @@ -67,6 +67,16 @@ static char* shifts[NUM_SHIFTS] = { }; +Encoder* enc_new(ErlNifEnv* env); +int enc_init(Encoder* e, ErlNifEnv* env); +ERL_NIF_TERM enc_error(Encoder* e, const char* msg); +ERL_NIF_TERM enc_obj_error(Encoder* e, const char* msg, ERL_NIF_TERM obj); +int enc_result(Encoder* e, ERL_NIF_TERM* value); +int enc_done(Encoder* e, ERL_NIF_TERM* value); +#if MAP_TYPE_PRESENT +int enc_map_to_ejson(ErlNifEnv* env, ERL_NIF_TERM map, ERL_NIF_TERM* out); +#endif + Encoder* enc_new(ErlNifEnv* env) {