# `struct raft` — Raft server

The raft server struct is the central part of C-Raft. It holds and drive the state of a single raft server in a cluster.

## Data types

struct `raft`

  A single raft server in a cluster.

`raft_id`

  Hold the value of a raft server ID. Guaranteed to be at least 64-bit long.

void `(*raft_close_cb)`(struct raft *r)

  Type definition for callback passed to `raft_close()`.

### Public members

void* `data`

  Space for user-defined arbitrary data. C-Raft does not use and does not touch this field.

raft_id `id`

  Server ID. Readonly.

## API

int `raft_init`(struct raft *r, struct raft_io *io, struct raft_fsm *fsm, raft_id id, const char *address)

  Initialize a raft server object.

int `raft_close`(struct raft* r, raft_close_cb cb)

  Close a raft server object, releasing all used resources.

  The memory of the object itself can be released only once the given close callback has been invoked.

int `raft_start`(struct raft* r)

  Start a raft server.

  The initial term, vote, snapshot and entries will be loaded from disk using the `raft_io->load()` method. The instance will start as follower, unless it’s the only voting server in the cluster, in which case it will automatically elect itself and become leader.