| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package raft
- import (
- "encoding/json"
- )
- // Codec defines the interface for encoding/decoding messages
- type Codec interface {
- Marshal(v interface{}) ([]byte, error)
- Unmarshal(data []byte, v interface{}) error
- Name() string
- }
- // JSONCodec implements Codec using JSON encoding
- type JSONCodec struct{}
- func (c *JSONCodec) Marshal(v interface{}) ([]byte, error) {
- return json.Marshal(v)
- }
- func (c *JSONCodec) Unmarshal(data []byte, v interface{}) error {
- return json.Unmarshal(data, v)
- }
- func (c *JSONCodec) Name() string {
- return "json"
- }
- // DefaultCodec is the default codec used for serialization
- // Change this to use a different codec (e.g., msgpack for better performance)
- var DefaultCodec Codec = &JSONCodec{}
- // SetCodec sets the default codec for serialization
- // Note: This should be called before creating any Raft instances
- func SetCodec(codec Codec) {
- DefaultCodec = codec
- }
- // MsgpackCodec implements Codec using msgpack encoding
- // To use msgpack, import github.com/vmihailenco/msgpack/v5 and implement:
- //
- // import "github.com/vmihailenco/msgpack/v5"
- //
- // type MsgpackCodec struct{}
- //
- // func (c *MsgpackCodec) Marshal(v interface{}) ([]byte, error) {
- // return msgpack.Marshal(v)
- // }
- //
- // func (c *MsgpackCodec) Unmarshal(data []byte, v interface{}) error {
- // return msgpack.Unmarshal(data, v)
- // }
- //
- // func (c *MsgpackCodec) Name() string {
- // return "msgpack"
- // }
- //
- // Then call: raft.SetCodec(&MsgpackCodec{})
|