listener

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 7, 2024 License: MIT Imports: 8 Imported by: 0

README

Listener

Build Status GoDoc Go Report Card Software License

This don't stable version.

Description

Supports
  • Custom Decoders

Installation

$ go get github.com/mantyr/listener

Author

Oleg Shevelev

Documentation

Index

Constants

View Source
const (
	OK              codes.Code = 0
	Canceled        codes.Code = 1
	Unknown         codes.Code = 2
	InvalidArgument codes.Code = 3
	Invalid         codes.Code = 4
	NotFound        codes.Code = 5
	AlreadyExists   codes.Code = 6
	Aborted         codes.Code = 7
	Unimplemented   codes.Code = 8
	Internal        codes.Code = 9
	Unavailable     codes.Code = 10

	InvalidEvent              codes.Code = 11
	EventDecoderAlreadyExists codes.Code = 12
	EventDecoderNotFound      codes.Code = 13
)

Variables

This section is empty.

Functions

func AlreadyExistsType

func AlreadyExistsType(err error) string

func Code

func Code(err error) codes.Code

Types

type ChannelName

type ChannelName string

type Config

type Config struct {
	// Host это адрес базы данных
	Host string

	// Port это порт по которому доступна база данных
	Port int

	// Name это название базы данных
	Name string

	// User это имя пользователя в базе данных
	User string

	// Password это пароль пользователя в базе данных
	Password string

	// MinReconnectInterval это минимальное время в секундах
	// до попытки восстановить соединение
	// После каждой попытки этот интервал удваивается до максимального
	MinReconnectInterval time.Duration

	// MaxReconnectInterval это максимальное время в секундах
	// до попытки восстановить соединение
	MaxReconnectInterval time.Duration
}

Config это минимальный набор данных для доступа к базе данных

func (*Config) Check

func (c *Config) Check() error

func (*Config) String

func (c *Config) String() string

String возвращает текстовое представление

type Connector

type Connector interface {
	// Register регистрирует декодер событий
	// OK
	// InvalidArgument
	// AlreadyExists
	Register(TriggerName, Operation, EventDecoder) error

	// Subscribe подписывается на события в канале
	Subscribe(ChannelName) error

	// Unsubscribe отписывается от событий в канале
	Unsubscribe(ChannelName) error

	// Next возвращает следующее событие после обработки зарегистрированным декодером
	// OK
	// Aborted
	// InvalidEvent
	// EventDecoderNotFound
	Next() (interface{}, error)

	// Notify возвращает канал без изменений потока событий
	Notify() <-chan *pq.Notification

	// Close закрывает соединение с базой данных
	Close() error
}

func New

func New(config *Config) (Connector, error)

type Error

type Error struct {
	Code              codes.Code
	Err               error
	AlreadyExistsType string
}

func (*Error) Error

func (e *Error) Error() string

type Event

type Event struct {
	TableName   TableName   `json:"table_name"`
	TriggerName TriggerName `json:"trigger_name"`
	Operation   Operation   `json:"operation"`

	Old String `json:"old,omitempty"`
	New String `json:"new,omitempty"`
}

type EventDecoder

type EventDecoder func(e *Event) (interface{}, error)

type Operation

type Operation string
const (
	Insert   Operation = "INSERT"
	Update   Operation = "UPDATE"
	Delete   Operation = "DELETE"
	Truncate Operation = "TRUNCATE"
)

type Router

type Router interface {
	// Register регистрирует декодер событий
	// OK
	// InvalidArgument
	// AlreadyExists
	Register(TriggerName, Operation, EventDecoder) error

	// Decode декодирует событие для последующей типизации
	Decode([]byte) (interface{}, error)
}

func NewRouter

func NewRouter() Router

type String added in v1.0.2

type String struct {
	Data string
}

func (*String) UnmarshalJSON added in v1.0.2

func (s *String) UnmarshalJSON(b []byte) error

type TableName

type TableName string

type TriggerName

type TriggerName string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL