Add qcbor_err_to_str (#40)

Signed-off-by: Patrick Uiterwijk <patrick@puiterwijk.org>
diff --git a/src/qcbor_err_to_str.c b/src/qcbor_err_to_str.c
new file mode 100644
index 0000000..3f9db0a
--- /dev/null
+++ b/src/qcbor_err_to_str.c
@@ -0,0 +1,48 @@
+/*==============================================================================
+ err_to_str.c -- strings names for errors
+
+ Copyright (c) 2020, Patrick Uiterwijk. All rights reserved.
+
+ SPDX-License-Identifier: BSD-3-Clause
+
+ See BSD-3-Clause license in README.md
+
+ Created on 3/21/20
+ =============================================================================*/
+
+#include "qcbor.h"
+
+#define _ERR_TO_STR(errpart) case QCBOR_##errpart: return "QCBOR_" #errpart;
+
+const char *qcbor_err_to_str(QCBORError err) {
+	switch (err) {
+	_ERR_TO_STR(SUCCESS)
+	_ERR_TO_STR(ERR_BUFFER_TOO_SMALL)
+	_ERR_TO_STR(ERR_ARRAY_NESTING_TOO_DEEP)
+	_ERR_TO_STR(ERR_ARRAY_TOO_LONG)
+	_ERR_TO_STR(ERR_TOO_MANY_CLOSES)
+	_ERR_TO_STR(ERR_UNSUPPORTED)
+	_ERR_TO_STR(ERR_HIT_END)
+	_ERR_TO_STR(ERR_BUFFER_TOO_LARGE)
+	_ERR_TO_STR(ERR_INT_OVERFLOW)
+	_ERR_TO_STR(ERR_MAP_LABEL_TYPE)
+	_ERR_TO_STR(ERR_ARRAY_OR_MAP_STILL_OPEN)
+	_ERR_TO_STR(ERR_DATE_OVERFLOW)
+	_ERR_TO_STR(ERR_BAD_TYPE_7)
+	_ERR_TO_STR(ERR_BAD_OPT_TAG)
+	_ERR_TO_STR(ERR_EXTRA_BYTES)
+	_ERR_TO_STR(ERR_CLOSE_MISMATCH)
+	_ERR_TO_STR(ERR_NO_STRING_ALLOCATOR)
+	_ERR_TO_STR(ERR_INDEFINITE_STRING_CHUNK)
+	_ERR_TO_STR(ERR_STRING_ALLOCATE)
+	_ERR_TO_STR(ERR_BAD_BREAK)
+	_ERR_TO_STR(ERR_TOO_MANY_TAGS)
+	_ERR_TO_STR(ERR_BAD_INT)
+	_ERR_TO_STR(ERR_NO_MORE_ITEMS)
+	_ERR_TO_STR(ERR_BAD_EXP_AND_MANTISSA)
+	_ERR_TO_STR(ERR_STRING_TOO_LONG)
+
+	default:
+		return "Invalid error";
+	}
+}