/*
 * Copyright 2020 Google LLC
 *
 * Use of this source code is governed by a BSD-style
 * license that can be found in the LICENSE file or at
 * https://developers.google.com/open-source/licenses/bsd
 */

#include "system.h"
#include "reftable-error.h"

#include <stdio.h>

const char *reftable_error_str(int err)
{
	static char buf[250];
	switch (err) {
	case REFTABLE_IO_ERROR:
		return "I/O error";
	case REFTABLE_FORMAT_ERROR:
		return "corrupt reftable file";
	case REFTABLE_NOT_EXIST_ERROR:
		return "file does not exist";
	case REFTABLE_LOCK_ERROR:
		return "data is locked";
	case REFTABLE_API_ERROR:
		return "misuse of the reftable API";
	case REFTABLE_ZLIB_ERROR:
		return "zlib failure";
	case REFTABLE_EMPTY_TABLE_ERROR:
		return "wrote empty table";
	case REFTABLE_REFNAME_ERROR:
		return "invalid refname";
	case REFTABLE_ENTRY_TOO_BIG_ERROR:
		return "entry too large";
	case REFTABLE_OUTDATED_ERROR:
		return "data concurrently modified";
	case REFTABLE_OUT_OF_MEMORY_ERROR:
		return "out of memory";
	case -1:
		return "general error";
	default:
		snprintf(buf, sizeof(buf), "unknown error code %d", err);
		return buf;
	}
}
