Files
ivy/common/status.c

72 lines
2.1 KiB
C
Raw Permalink Normal View History

#include <blue/core/error.h>
#include <errno.h>
#include <ivy/status.h>
static const b_error_definition error_defs[] = {
B_ERROR_DEFINITION(IVY_OK, "OK", "Success"),
B_ERROR_DEFINITION(IVY_ERR_EOF, "EOF", "Unexpected end of file"),
B_ERROR_DEFINITION(IVY_ERR_IO_FAILURE, "IO_FAILURE", "I/O failure"),
B_ERROR_DEFINITION(IVY_ERR_BAD_SYNTAX, "BAD_SYNTAX", "Invalid syntax"),
B_ERROR_DEFINITION(IVY_ERR_NO_MEMORY, "NO_MEMORY", "Out of memory"),
B_ERROR_DEFINITION(
IVY_ERR_NOT_SUPPORTED, "NOT_SUPPORTED",
"Operation not supported"),
B_ERROR_DEFINITION(
IVY_ERR_INTERNAL_FAILURE, "INTERNAL_FAILURE",
"Internal failure"),
B_ERROR_DEFINITION(IVY_ERR_BAD_STATE, "BAD_STATE", "Bad state"),
B_ERROR_DEFINITION(
IVY_ERR_INVALID_VALUE, "INVALID_VALUE", "Invalid value"),
B_ERROR_DEFINITION(IVY_ERR_NO_ENTRY, "NO_ENTRY", "Name does not exist"),
B_ERROR_DEFINITION(
IVY_ERR_NAME_EXISTS, "NAME_EXISTS", "Name already exists"),
B_ERROR_DEFINITION(IVY_ERR_BAD_FORMAT, "BAD_FORMAT", "Bad format"),
B_ERROR_DEFINITION(
IVY_ERR_PARSE_FAILURE, "PARSE_FAILURE", "Parse failure"),
B_ERROR_DEFINITION(
IVY_ERR_CODEGEN_FAILURE, "CODEGEN_FAILURE",
"Code generation failure"),
};
static const b_error_vendor error_vendor = {
.v_name = "Ivy",
.v_error_definitions = error_defs,
.v_error_definitions_length = sizeof error_defs,
};
const char *ivy_status_to_string(enum ivy_status status)
{
return error_defs[status].err_message;
}
const struct b_error_vendor *ivy_error_vendor(void)
{
return &error_vendor;
}
#define ENUM_CONVERT(from, to) \
case (from): \
return (to)
enum ivy_status ivy_status_from_b_status(enum b_status status)
{
switch (status) {
ENUM_CONVERT(B_SUCCESS, IVY_OK);
ENUM_CONVERT(B_ERR_NAME_EXISTS, IVY_ERR_NAME_EXISTS);
ENUM_CONVERT(B_ERR_NO_MEMORY, IVY_ERR_NO_MEMORY);
default:
return IVY_ERR_INTERNAL_FAILURE;
}
}
enum ivy_status ivy_status_from_errno(int err)
{
switch (err) {
ENUM_CONVERT(0, IVY_OK);
ENUM_CONVERT(ENOENT, IVY_ERR_NO_ENTRY);
ENUM_CONVERT(ENOMEM, IVY_ERR_NO_MEMORY);
default:
return IVY_ERR_INTERNAL_FAILURE;
}
}