#ifndef ASDF_ERROR_H
#define ASDF_ERROR_H
#include <asdf/util.h>
ASDF_BEGIN_DECLS
typedef enum {
ASDF_ERR_NONE = 0,
ASDF_ERR_UNKNOWN_STATE,
ASDF_ERR_STREAM_INIT_FAILED,
ASDF_ERR_STREAM_READ_ONLY,
ASDF_ERR_INVALID_ASDF_HEADER,
ASDF_ERR_UNEXPECTED_EOF,
ASDF_ERR_INVALID_BLOCK_HEADER,
ASDF_ERR_BLOCK_MAGIC_MISMATCH,
ASDF_ERR_YAML_PARSER_INIT_FAILED,
ASDF_ERR_YAML_PARSE_FAILED,
ASDF_ERR_OUT_OF_MEMORY,
ASDF_ERR_SYSTEM,
ASDF_ERR_INVALID_ARGUMENT,
ASDF_ERR_UNKNOWN_COMPRESSION,
ASDF_ERR_COMPRESSION_FAILED,
ASDF_ERR_EXTENSION_NOT_FOUND,
ASDF_ERR_OVER_LIMIT
} asdf_error_code_t;
typedef struct asdf_file asdf_file_t;
typedef struct asdf_value asdf_value_t;
#define ASDF_ERROR_COMMON(obj, code, ...) _Generic((obj), \
asdf_file_t *: asdf_file_error_common, \
asdf_value_t *: asdf_value_error_common \
)((obj), (code), __FILE__, __LINE__, ##__VA_ARGS__)
#define ASDF_ERROR_OOM(obj) _Generic((obj), \
asdf_file_t *: asdf_file_error_oom, \
asdf_value_t *: asdf_value_error_oom \
)((obj), __FILE__, __LINE__)
#define ASDF_ERROR_SYSTEM(obj, errnum) \
_Generic( \
(obj), asdf_file_t *: asdf_file_error_system, asdf_value_t *: asdf_value_error_system)( \
(obj), (errnum), __FILE__, __LINE__)
ASDF_EXPORT void asdf_file_error_common(
asdf_file_t *file, asdf_error_code_t code, const char *src_file, int lineno, ...);
ASDF_EXPORT void asdf_value_error_common(
asdf_value_t *file, asdf_error_code_t code, const char *src_file, int lineno, ...);
ASDF_EXPORT void asdf_file_error_oom(asdf_file_t *file, const char *src_file, int lineno);
ASDF_EXPORT void asdf_value_error_oom(asdf_value_t *file, const char *src_file, int lineno);
ASDF_EXPORT void asdf_file_error_system(
asdf_file_t *value, int errnum, const char *src_file, int lineno);
ASDF_EXPORT void asdf_value_error_system(
asdf_value_t *value, int errnum, const char *src_file, int lineno);
ASDF_END_DECLS
#endif