/*- * Copyright (c) 2004-2017 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _JER_ENCODER_H_ #define _JER_ENCODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* Flags used by the jer_encode() and (*jer_type_encoder_f), defined below * * This isn't actually used, it might be used in the future to support * both normal JSON and prettified JSON output or removed. * It came from XER */ enum jer_encoder_flags_e { /* Mode of encoding */ JER_F = 0x01, /* JER (pretty-printing) */ }; /* * The JER encoder of any type. May be invoked by the application. * Produces JER output. */ asn_enc_rval_t jer_encode(const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, void *app_key /* Arbitrary callback argument */ ); /* * The variant of the above function which dumps the JER * output into the chosen file pointer. * RETURN VALUES: * 0: The structure is printed. * -1: Problem printing the structure. * WARNING: No sensible errno value is returned. */ int jer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td, const void *struct_ptr); /* * A helper function that uses JER encoding/decoding to verify that: * - Both structures encode into the same JER. * - Both resulting JER byte streams can be decoded back. * - Both decoded structures encode into the same JER (round-trip). * All of this verifies equivalence between structures and a round-trip. * ARGUMENTS: * (opt_debug_stream) - If specified, prints ongoing details. */ enum jer_equivalence_e { JEQ_SUCCESS, /* The only completely positive return value */ JEQ_FAILURE, /* General failure */ JEQ_ENCODE1_FAILED, /* First structure JER encoding failed */ JEQ_ENCODE2_FAILED, /* Second structure JER encoding failed */ JEQ_DIFFERENT, /* Structures encoded into different JER */ JEQ_DECODE_FAILED, /* Decode of the JER data failed */ JEQ_ROUND_TRIP_FAILED /* Bad round-trip */ }; enum jer_equivalence_e jer_equivalent( const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1, const void *struct2, FILE *opt_debug_stream); /* * Type of the generic JER encoder. */ typedef asn_enc_rval_t(jer_type_encoder_f)( const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, /* Structure to be encoded */ int ilevel, /* Level of indentation */ enum jer_encoder_flags_e jer_flags, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ void *app_key /* Arbitrary callback argument */ ); #ifdef __cplusplus } #endif #endif /* _JER_ENCODER_H_ */