Files
go-telegram/dispatch/conversation/in_memory.go
T
lukaszraczylo ac7cae8fa7 Initial release of go-telegram
A fully-generated, strongly-typed Go client for the Telegram Bot API.

* 176 methods + 301 types generated from Bot API v10.0
* 1408 auto-generated tests (8 scenarios per method)
* Typed unions throughout — no 'any' in the public surface
* Pluggable HTTP transport and JSON codec (default goccy/go-json)
* Built-in retry middleware honouring Telegram's retry_after
* Generic dispatcher with filters and conversation handlers
* Self-verifying codegen pipeline (regen → audit → emit → run tests)
* 14 example bots covering common patterns
2026-05-09 13:09:27 +01:00

44 lines
966 B
Go

package conversation
import (
"context"
"sync"
)
// MemoryStorage is the default in-process Storage. It is safe for
// concurrent use. Conversation state is lost on process restart; use
// a custom Storage backed by a database for persistent flows.
type MemoryStorage struct {
mu sync.RWMutex
state map[string]State
}
// NewMemoryStorage constructs an empty in-memory storage.
func NewMemoryStorage() *MemoryStorage {
return &MemoryStorage{state: map[string]State{}}
}
func (s *MemoryStorage) Get(_ context.Context, key string) (State, error) {
s.mu.RLock()
defer s.mu.RUnlock()
v, ok := s.state[key]
if !ok {
return "", ErrKeyNotFound
}
return v, nil
}
func (s *MemoryStorage) Set(_ context.Context, key string, state State) error {
s.mu.Lock()
defer s.mu.Unlock()
s.state[key] = state
return nil
}
func (s *MemoryStorage) Delete(_ context.Context, key string) error {
s.mu.Lock()
defer s.mu.Unlock()
delete(s.state, key)
return nil
}