# `struct raft_fsm` — Application state machine

The FSM struct defines the interface that the application’s state machine must implement in order to be replicated by Raft.

## Data types

struct `raft_fsm`

  Hold pointers to an actual implementation of the FSM interface.

### Public members

void* `data`

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

int `version`

  API version implemented by this instance. Currently 1.

int `(*apply)`(struct raft_fsm *fsm, const struct raft_buffer *buf, void **result)

  Apply a committed RAFT_COMMAND entry to the state machine.

int `(*snapshot)`(struct raft_fsm *fsm, struct raft_buffer *bufs[], unsigned *n_bufs)

  Take a snapshot of the state machine.

int `(*restore)`(struct raft_fsm *fsm, struct raft_buffer *buf)

  Restore a snapshot of the state machine.