margaret

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 13, 2019 License: MIT Imports: 3 Imported by: 32

README

Margaret GoDoc Build Status Go Report Card

aka the Log Lady. Helps you interacting with logs.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNulled errNulled
View Source
var OOB oob

OOB is an out of bounds error

Functions

func IsErrNulled

func IsErrNulled(err error) bool

func IsOutOfBounds

func IsOutOfBounds(err error) bool

IsOutOfBounds returns whether a particular error is an out-of-bounds error

Types

type Alterer

type Alterer interface {
	Null(Seq) error

	Replace(Seq, []byte) error
}

type BaseSeq

type BaseSeq int64

BaseSeq is the sequence number of an item in the log TODO currently this BaseSeq and the one in multilog somewhat do the same but not really. Find a way to unify them.

const (
	// SeqEmpty is the current sequence number of an empty log
	SeqEmpty BaseSeq = -1
)

func (BaseSeq) Seq

func (s BaseSeq) Seq() int64

Seq returns itself to adhere to the Seq interface in ./multilog.

type Codec

type Codec interface {
	// Marshal encodes a single value and returns the serialized byte slice.
	Marshal(value interface{}) ([]byte, error)

	// Unmarshal decodes and returns the value stored in data.
	Unmarshal(data []byte) (interface{}, error)

	NewDecoder(io.Reader) Decoder
	NewEncoder(io.Writer) Encoder
}

Codec marshals and unmarshals values and creates encoders and decoders

type Decoder

type Decoder interface {
	Decode() (interface{}, error)
}

Decoder decodes values

type Encoder

type Encoder interface {
	Encode(v interface{}) error
}

Encoder encodes values

type Framing

type Framing interface {
	DecodeFrame([]byte) ([]byte, error)
	EncodeFrame([]byte) ([]byte, error)

	FrameSize() int64
}

Framing encodes and decodes byte slices into a framing so the frames can be stored sequentially

type Log

type Log interface {
	// Seq returns an observable that holds the current sequence number
	Seq() luigi.Observable

	// Get returns the entry with sequence number seq
	Get(seq Seq) (interface{}, error)

	// Query returns a stream that is constrained by the passed query specification
	Query(...QuerySpec) (luigi.Source, error)

	// Append appends a new entry to the log
	Append(interface{}) (Seq, error)
}

Log stores entries sequentially, which can be queried individually using Get or as streams using Query.

type Query

type Query interface {
	// Gt makes the source return only items with sequence numbers > seq.
	Gt(seq Seq) error
	// Gte makes the source return only items with sequence numbers >= seq.
	Gte(seq Seq) error
	// Lt makes the source return only items with sequence numbers < seq.
	Lt(seq Seq) error
	// Lte makes the source return only items with sequence numbers <= seq.
	Lte(seq Seq) error
	// Limit makes the source return only up to n items.
	Limit(n int) error

	// Reverse makes the source return the lastest values first
	Reverse(yes bool) error

	// Live makes the source block at the end of the log and wait for new values
	// that are being appended.
	Live(bool) error

	// SeqWrap makes the source return values that contain both the item and its
	// sequence number, instead of the item alone.
	SeqWrap(bool) error
}

Query is the interface implemented by the concrete log implementations that collects the constraints of the query.

type QuerySpec

type QuerySpec func(Query) error

QuerySpec is a constraint on the query.

func ErrorQuerySpec

func ErrorQuerySpec(err error) QuerySpec

ErrorQuerySpec makes the log.Query call return the passed error.

func Gt

func Gt(s Seq) QuerySpec

Gt makes the source return only items with sequence numbers > seq.

func Gte

func Gte(s Seq) QuerySpec

Gte makes the source return only items with sequence numbers >= seq.

func Limit

func Limit(n int) QuerySpec

Limit makes the source return only up to n items.

func Live

func Live(live bool) QuerySpec

Live makes the source block at the end of the log and wait for new values that are being appended.

func Lt

func Lt(s Seq) QuerySpec

Lt makes the source return only items with sequence numbers < seq.

func Lte

func Lte(s Seq) QuerySpec

Lte makes the source return only items with sequence numbers <= seq.

func MergeQuerySpec

func MergeQuerySpec(spec ...QuerySpec) QuerySpec

MergeQuerySpec collects several contraints and merges them into one.

func Reverse

func Reverse(yes bool) QuerySpec

func SeqWrap

func SeqWrap(wrap bool) QuerySpec

SeqWrap makes the source return values that contain both the item and its sequence number, instead of the item alone.

type Seq

type Seq interface {
	Seq() int64
}

type SeqWrapper

type SeqWrapper interface {
	// Seq returns the sequence number of the item.
	Seq() Seq

	// Value returns the item itself.
	Value() interface{}
}

SeqWrapper wraps a value to attach a sequence number to it.

func WrapWithSeq

func WrapWithSeq(v interface{}, seq Seq) SeqWrapper

WrapWithSeq wraps the value v to attach a sequence number to it.

Directories

Path Synopsis
codec
framing
internal
mem
Code generated by counterfeiter.
Code generated by counterfeiter.
Package offset2 implements a margaret log as persisted sequence of data across multiple files.
Package offset2 implements a margaret log as persisted sequence of data across multiple files.
all

Jump to

Keyboard shortcuts

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