module git2.sys.refdb_backend;

import git2.common;
import git2.oid;
import git2.types;

extern (C):

struct git_reference_iterator {
	git_refdb *db;
	int function(
		git_reference **ref_,
		git_reference_iterator *iter) next;
	int function(
		const(char)** ref_name,
		git_reference_iterator *iter) next_name;
	void function(
		git_reference_iterator *iter) free;
}

struct git_refdb_backend {
	uint version_ = GIT_ODB_BACKEND_VERSION;
	int function(
		int *exists,
		git_refdb_backend *backend,
		const(char)* ref_name) exists;
	int function(
		git_reference **out_,
		git_refdb_backend *backend,
		const(char)* ref_name) lookup;
	int function(
		git_reference_iterator **iter,
		git_refdb_backend *backend,
		const(char)* glob) iterator;
	int function(git_refdb_backend *backend,
		const(git_reference)* ref_, int force) write;
	int function(
		git_reference **out_, git_refdb_backend *backend,
		const(char)* old_name, const(char)* new_name, int force) rename;
	int function(git_refdb_backend *backend, const(char)* ref_name) delete_;
	int function(git_refdb_backend *backend) compress;
	void function(git_refdb_backend *backend) free;
}

enum GIT_ODB_BACKEND_VERSION = 1;
enum git_refdb_backend GIT_ODB_BACKEND_INIT = { GIT_ODB_BACKEND_VERSION };

int git_refdb_backend_fs(
	git_refdb_backend **backend_out,
	git_repository *repo);

int git_refdb_set_backend(
	git_refdb *refdb,
	git_refdb_backend *backend);