Program Listing for File error.h

Return to documentation for file (wyrd/error.h)

/*
 * This file is part of wyrd.
 *
 * Author(s): Jens Finkhaeuser <jens@finkhaeuser.de>
 *
 * Copyright (c) 2022 Interpeer gUG (haftungsbeschränkt)
 *
 * SPDX-License-Identifier: GPL-3.0-only
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 **/
#ifndef WYRD_ERROR_H
#define WYRD_ERROR_H

#include <wyrd.h>

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

#if !defined(WYRD_START_ERRORS)
#define WYRD_START_ERRORS \
  typedef uint32_t wyrd_error_t; \
  enum wyrd_error_code {
#define WYRD_ERRDEF(name, code, desc) WYRD_ ## name = code,
#define WYRD_END_ERRORS \
    WYRD_ERROR_LAST, \
 \
    WYRD_START_USER_RANGE = 1000 \
 \
  };
#define WYRD_ERROR_FUNCTIONS
#endif


/*****************************************************************************
 * Error definitions
 **/

WYRD_START_ERRORS

WYRD_ERRDEF(ERR_SUCCESS,
    0,
    "No error")
WYRD_ERRDEF(ERR_UNEXPECTED,
    1,
    "Nobody expects the Spanish Inquisition!")
WYRD_ERRDEF(ERR_NOT_IMPLEMENTED,
    2,
    "The requested functionality is not yet implemented.")
WYRD_ERRDEF(ERR_INVALID_VALUE,
    3,
    "An invalid value was provided as a parameter.")
WYRD_ERRDEF(ERR_INITIALIZATION,
    4,
    "Failed to initialize a resource.")
WYRD_ERRDEF(ERR_OUT_OF_MEMORY,
    5,
    "Out of memory.")
WYRD_ERRDEF(ERR_ACCESS_DENIED,
    10,
    "Access to a file/resource was denied.")
WYRD_ERRDEF(ERR_FS_ERROR,
    11,
    "A file/resource or one of its parent path components does not exist, or "
    "could not be resolved.")
WYRD_ERRDEF(ERR_IO_ERROR,
    12,
    "Reading from/writing to a file or resource failed.")
WYRD_ERRDEF(ERR_PROPERTY_NOT_FOUND,
    20,
    "Property not found in document.")
WYRD_ERRDEF(ERR_EDIT_NOT_FOUND,
    21,
    "No matching edit found in document.")
WYRD_ERRDEF(ERR_BAD_PROPERTY_TYPE,
    22,
    "Tried accessing a property as the wrong type.")
WYRD_ERRDEF(ERR_BAD_MERGE,
    23,
    "Could not merge property values.")
WYRD_ERRDEF(ERR_BAD_MERGE_STRATEGY,
    24,
    "The given merge strategy does not match the one on record.")
WYRD_ERRDEF(ERR_END_OF_RESOURCE,
    24,
    "While reading, the end of the resource was reached.")

WYRD_ERRDEF(ERR_ITERATOR_INVALID,
    30,
    "Invalid iterator; this could mean it is at the end.")
WYRD_ERRDEF(ERR_SERIALIZATION,
    40,
    "Error occurred when serializing/deserializing.")
// TODO add errors as required

WYRD_END_ERRORS


#if defined(WYRD_ERROR_FUNCTIONS)

/*****************************************************************************
 * Functions
 **/

WYRD_API char const * wyrd_error_message(wyrd_error_t code);

WYRD_API char const * wyrd_error_name(wyrd_error_t code);


#endif // WYRD_ERROR_FUNCTIONS


#undef WYRD_START_ERRORS
#undef WYRD_ERRDEF
#undef WYRD_END_ERRORS

#undef WYRD_ERROR_FUNCTIONS

#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus


#endif // guard