libasdf-rs 0.2.2

Drop-in C ABI replacement for libasdf, implemented in Rust
Documentation
#ifndef ASDF_PARSER_H
#define ASDF_PARSER_H

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>

#include <asdf/error.h>
#include <asdf/log.h>
#include <asdf/util.h>


ASDF_BEGIN_DECLS

// NOLINTNEXTLINE(readability-identifier-naming)
#define _ASDF_PARSER_OPTS(X) \
    X(ASDF_PARSER_OPT_EMIT_YAML_EVENTS, 0) \
    X(ASDF_PARSER_OPT_BUFFER_TREE, 1)


typedef enum {
// clang-format off
#define X(flag, bit) flag = (1ULL << (bit)),
    _ASDF_PARSER_OPTS(X)
#undef X
    // clang-format on
} asdf_parser_opt_t;


// NOLINTNEXTLINE(readability-magic-numbers)
ASDF_STATIC_ASSERT(ASDF_PARSER_OPT_BUFFER_TREE < (1ULL << 63), "too many flags for 64-bit int");


typedef uint64_t asdf_parser_optflags_t;


/**
 * Low-level parser configuration
 *
 * Currently just consists of a bitset of flags that are used internally by
 * the library; these flags are not currently documented.
 */
typedef struct asdf_parser_cfg {
    asdf_parser_optflags_t flags;
    asdf_log_cfg_t *log;
} asdf_parser_cfg_t;


typedef struct asdf_parser asdf_parser_t;


/* Forward declaration for asdf_event_t */
typedef struct asdf_event asdf_event_t;


/* Public API functions */
ASDF_EXPORT asdf_parser_t *asdf_parser_create(const asdf_parser_cfg_t *config);
ASDF_EXPORT int asdf_parser_set_input_file(asdf_parser_t *parser, const char *filename);
ASDF_EXPORT int asdf_parser_set_input_fp(asdf_parser_t *parser, FILE *fp, const char *filename);
ASDF_EXPORT int asdf_parser_set_input_mem(asdf_parser_t *parser, const void *buf, size_t size);
ASDF_EXPORT asdf_event_t *asdf_parser_parse(asdf_parser_t *parser);
ASDF_EXPORT void asdf_parser_destroy(asdf_parser_t *parser);
ASDF_EXPORT bool asdf_parser_has_error(const asdf_parser_t *parser);
ASDF_EXPORT const char *asdf_parser_get_error(const asdf_parser_t *parser);
ASDF_EXPORT asdf_error_code_t asdf_parser_error_code(const asdf_parser_t *parser);
ASDF_EXPORT int asdf_parser_error_errno(const asdf_parser_t *parser);

ASDF_END_DECLS

#endif /* ASDF_PARSER_H */