Documentation
¶
Overview ¶
Package storage contains common structures for iterating over peer storage.
Index ¶
Examples ¶
Constants ¶
const LatestVersion = 1
LatestVersion is a latest supported version of data.
Variables ¶
var ErrPeerNotFound = xerrors.New("peer not found")
ErrPeerNotFound is a special error to return when peer not found.
Functions ¶
This section is empty.
Types ¶
type Peer ¶
type Peer struct {
Version int
Key peer.DialogKey
CreatedAt int64
User *tg.User `json:",omitempty"`
Chat *tg.Chat `json:",omitempty"`
Channel *tg.Channel `json:",omitempty"`
}
Peer is abstraction for peer object.
func (Peer) AsInputChannel ¶
func (p Peer) AsInputChannel() (*tg.InputChannel, bool)
AsInputChannel tries to convert peer to *tg.InputChannel.
func (Peer) AsInputPeer ¶
func (p Peer) AsInputPeer() tg.InputPeerClass
AsInputPeer tries to convert peer to tg.InputPeerClass.
func (Peer) AsInputUser ¶
AsInputUser tries to convert peer to *tg.InputUser.
func (*Peer) FromInputPeer ¶
func (p *Peer) FromInputPeer(input tg.InputPeerClass) error
FromInputPeer fills Peer object using given tg.InputPeerClass.
type PeerStorage ¶
type PeerStorage interface {
// Add adds given peer to the storage.
Add(ctx context.Context, value Peer) error
// Find finds peer using given key.
// If peer not found, it returns ErrPeerNotFound error.
Find(ctx context.Context, key Key) (Peer, error)
// Assign adds given peer to the storage and associates it to the given key.
Assign(ctx context.Context, key string, value Peer) error
// Resolve finds peer using associated key.
// If peer not found, it returns ErrPeerNotFound error.
Resolve(ctx context.Context, key string) (Peer, error)
}
PeerStorage is abstraction for peer storage.
type ResolverCache ¶
type ResolverCache struct {
// contains filtered or unexported fields
}
ResolverCache is a peer.Resolver cache implemented using peer storage.
Example ¶
package main
import (
"context"
"fmt"
"os"
"os/signal"
pebbledb "github.com/cockroachdb/pebble"
"golang.org/x/xerrors"
"github.com/gotd/td/telegram/message"
"github.com/gotd/td/telegram/message/peer"
"github.com/gotd/td/tg"
"github.com/gotd/td/telegram"
"github.com/gotd/contrib/pebble"
"github.com/gotd/contrib/storage"
)
func resolverCache(ctx context.Context) error {
db, err := pebbledb.Open("pebble.db", &pebbledb.Options{})
if err != nil {
return xerrors.Errorf("create pebble storage: %w", err)
}
client, err := telegram.ClientFromEnvironment(telegram.Options{})
if err != nil {
return xerrors.Errorf("create client: %w", err)
}
return client.Run(ctx, func(ctx context.Context) error {
raw := tg.NewClient(client)
resolver := storage.NewResolverCache(peer.Plain(raw), pebble.NewPeerStorage(db))
s := message.NewSender(raw).WithResolver(resolver)
_, err := s.Resolve("durov").Text(ctx, "Hi!")
return err
})
}
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
if err := resolverCache(ctx); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "%+v\n", err)
os.Exit(1)
}
}
func NewResolverCache ¶
func NewResolverCache(next peer.Resolver, storage PeerStorage) ResolverCache
NewResolverCache creates new ResolverCache.
func (ResolverCache) ResolveDomain ¶
func (r ResolverCache) ResolveDomain(ctx context.Context, domain string) (tg.InputPeerClass, error)
ResolveDomain implements peer.Resolver
func (ResolverCache) ResolvePhone ¶
func (r ResolverCache) ResolvePhone(ctx context.Context, phone string) (tg.InputPeerClass, error)
ResolvePhone implements peer.Resolver