common: re-define status codes to be compatible with b_result

This commit is contained in:
2025-09-08 15:43:29 +01:00
parent eb260fb35c
commit 48fb330f47
2 changed files with 57 additions and 31 deletions

View File

@@ -3,24 +3,32 @@
#include <ivy/misc.h>
#define IVY_ERROR_VENDOR (ivy_error_vendor())
enum b_status;
struct b_error_vendor;
enum ivy_status {
IVY_OK = 0,
IVY_ERR_EOF = -1,
IVY_ERR_IO_FAILURE = -2,
IVY_ERR_BAD_SYNTAX = -3,
IVY_ERR_NO_MEMORY = -4,
IVY_ERR_NOT_SUPPORTED = -5,
IVY_ERR_INTERNAL_FAILURE = -6,
IVY_ERR_BAD_STATE = -7,
IVY_ERR_INVALID_VALUE = -8,
IVY_ERR_NO_ENTRY = -9,
IVY_ERR_NAME_EXISTS = -10,
IVY_ERR_BAD_FORMAT = -11,
IVY_ERR_EOF,
IVY_ERR_IO_FAILURE,
IVY_ERR_BAD_SYNTAX,
IVY_ERR_NO_MEMORY,
IVY_ERR_NOT_SUPPORTED,
IVY_ERR_INTERNAL_FAILURE,
IVY_ERR_BAD_STATE,
IVY_ERR_INVALID_VALUE,
IVY_ERR_NO_ENTRY,
IVY_ERR_NAME_EXISTS,
IVY_ERR_BAD_FORMAT,
IVY_ERR_PARSE_FAILURE,
IVY_ERR_CODEGEN_FAILURE,
};
IVY_API const char *ivy_status_to_string(enum ivy_status status);
IVY_API const struct b_error_vendor *ivy_error_vendor(void);
IVY_API enum ivy_status ivy_status_from_b_status(enum b_status status);
IVY_API enum ivy_status ivy_status_from_errno(int err);

View File

@@ -1,29 +1,47 @@
#include <blue/core/status.h>
#include <blue/core/error.h>
#include <errno.h>
#include <ivy/status.h>
#define ENUM_STR(x) \
case x: \
return #x
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)
{
switch (status) {
ENUM_STR(IVY_OK);
ENUM_STR(IVY_ERR_EOF);
ENUM_STR(IVY_ERR_IO_FAILURE);
ENUM_STR(IVY_ERR_BAD_SYNTAX);
ENUM_STR(IVY_ERR_NO_MEMORY);
ENUM_STR(IVY_ERR_NOT_SUPPORTED);
ENUM_STR(IVY_ERR_INTERNAL_FAILURE);
ENUM_STR(IVY_ERR_BAD_STATE);
ENUM_STR(IVY_ERR_INVALID_VALUE);
ENUM_STR(IVY_ERR_NO_ENTRY);
ENUM_STR(IVY_ERR_NAME_EXISTS);
ENUM_STR(IVY_ERR_BAD_FORMAT);
default:
return "";
return error_defs[status].err_message;
}
const struct b_error_vendor *ivy_error_vendor(void)
{
return &error_vendor;
}
#define ENUM_CONVERT(from, to) \