go-store/doc.go
Virgil 5c7e243fc0 feat(store): align public API with RFC
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 04:44:45 +00:00

65 lines
1.6 KiB
Go

// Package store provides SQLite-backed storage for grouped entries, TTL expiry,
// namespace isolation, quota enforcement, and reactive change notifications.
//
// Usage example:
//
// func main() {
// storeInstance, err := store.New(":memory:")
// if err != nil {
// return
// }
// defer storeInstance.Close()
//
// if err := storeInstance.Set("config", "colour", "blue"); err != nil {
// return
// }
// if err := storeInstance.SetWithTTL("session", "token", "abc123", 5*time.Minute); err != nil {
// return
// }
//
// colourValue, err := storeInstance.Get("config", "colour")
// if err != nil {
// return
// }
// fmt.Println(colourValue)
//
// for entry, err := range storeInstance.All("config") {
// if err != nil {
// return
// }
// fmt.Println(entry.Key, entry.Value)
// }
//
// events := storeInstance.Watch("config")
// defer storeInstance.Unwatch("config", events)
// go func() {
// for event := range events {
// fmt.Println(event.Type, event.Group, event.Key, event.Value)
// }
// }()
//
// unregister := storeInstance.OnChange(func(event store.Event) {
// fmt.Println("changed", event.Group, event.Key, event.Value)
// })
// defer unregister()
//
// scopedStore, err := store.NewScopedWithQuota(
// storeInstance,
// "tenant-a",
// store.QuotaConfig{MaxKeys: 100, MaxGroups: 10},
// )
// if err != nil {
// return
// }
// if err := scopedStore.Set("preferences", "locale", "en-GB"); err != nil {
// return
// }
//
// for groupName, err := range storeInstance.GroupsSeq("tenant-a:") {
// if err != nil {
// return
// }
// fmt.Println(groupName)
// }
// }
package store