type FilePersistence struct {
path string
}
func (p *FilePersistence) Save(cursor uint64, clientID string, queue []sync.Mutation, store map[string]map[string][]byte) error {
data := map[string]any{
"cursor": cursor,
"clientID": clientID,
"queue": queue,
"store": store,
}
bytes, _ := json.Marshal(data)
return os.WriteFile(p.path, bytes, 0644)
}
func (p *FilePersistence) Load() (uint64, string, []sync.Mutation, map[string]map[string][]byte, error) {
bytes, err := os.ReadFile(p.path)
if err != nil {
return 0, "", nil, nil, nil // Fresh start
}
var data map[string]any
json.Unmarshal(bytes, &data)
// Extract and return values...
}
// Usage
sync.Options{
Persistence: &FilePersistence{path: "sync-state.json"},
}