ds

package
v0.0.49 Latest Latest
Warning

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

Go to latest
Published: Jun 27, 2020 License: MIT Imports: 18 Imported by: 0

Documentation

Overview

Package ds describes documents and document stores.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DocumentPaths

func DocumentPaths(docs []*Document) []string

DocumentPaths from Document's.

func Path

func Path(paths ...interface{}) string

Path returns a path string from the specified paths or path components. The components can be strings, values with a String() function.

For example,

Path("a", "b") => "/a/b"
Path("") => "/"
Path("/a/") => "/a"
Path("/a//b") => "/a/b"

func PathComponents

func PathComponents(path string) []string

PathComponents returns the components of a path.

func PathFirst

func PathFirst(path string) string

PathFirst returns first path component.

func PathFrom

func PathFrom(path string, n int) string

PathFrom skips first n components.

func PathLast

func PathLast(path string) string

PathLast returns last path component.

func SetLogger

func SetLogger(l Logger)

SetLogger sets logger for the package.

func Spew

func Spew(iter DocumentIterator, opt ...SpewOption) (*bytes.Buffer, error)

Spew writes DocumentIterator to buffer.

func SpewOut

func SpewOut(iter DocumentIterator, out io.Writer, opt ...SpewOption) error

SpewOut writes DocumentIterator to io.Writer. You need to specify a path or prefix, since listing root is not supported.

Types

type Collection

type Collection struct {
	// Path for collection.
	Path string
}

Collection is a location for Document's.

type CollectionIterator

type CollectionIterator interface {
	// Next collection, or nil.
	Next() (*Collection, error)
	// Release resources associated with the iterator.
	Release()
}

CollectionIterator is an iterator for Collection's.

func NewCollectionIterator

func NewCollectionIterator(cols []*Collection) CollectionIterator

NewCollectionIterator returns an iterator for a Collection slice.

type ContextLogger

type ContextLogger interface {
	Debugf(ctx context.Context, format string, args ...interface{})
	Infof(ctx context.Context, format string, args ...interface{})
	Warningf(ctx context.Context, format string, args ...interface{})
	Errorf(ctx context.Context, format string, args ...interface{})
}

ContextLogger interface used in this package with request context.

func NewContextLogger

func NewContextLogger(lev LogLevel) ContextLogger

NewContextLogger ...

type Direction

type Direction string

Direction is ascending or descending.

const (
	// Ascending direction.
	Ascending Direction = "asc"
	// Descending direction.
	Descending Direction = "desc"
)

type Document

type Document struct {
	// Path of document.
	Path string `json:"path" msgpack:"p"`
	// Data ...
	Data []byte `json:"data" msgpack:"dat"`

	// CreatedAt (read only). The time at which the document was created.
	CreatedAt time.Time `json:"cts" msgpack:"cts"`
	// UpdatedAt (read only). The time at which the document was last changed.
	UpdatedAt time.Time `json:"uts" msgpack:"uts"`
}

Document is data at a path.

func NewDocument

func NewDocument(path string, data []byte) *Document

NewDocument creates a datastore document.

func (*Document) Contains

func (d *Document) Contains(contains string) bool

Contains returns true if path or value contains the string.

func (*Document) Pretty

func (d *Document) Pretty() []byte

Pretty returns "prettified" output, if data is a format that supports it.

func (Document) String

func (d Document) String() string

type DocumentIterator

type DocumentIterator interface {
	// Next document, or nil.
	Next() (*Document, error)
	// Release resources associated with the iterator.
	Release()
}

DocumentIterator is an iterator for Document's.

func NewDocumentIterator

func NewDocumentIterator(docs ...*Document) DocumentIterator

NewDocumentIterator returns an iterator for a Document slice.

type DocumentStore

type DocumentStore interface {
	// Create data at path.
	// ErrPathExists if path already exists.
	//
	// Paths can be nested as long as they are even length components.
	// For example,
	//
	//   collection1/key1 (OK)
	//   collection1/key1/collection2/key2 (OK)
	//   collection1 (INVALID)
	//   collection1/key1/collection2 (INVALID)
	//
	Create(ctx context.Context, path string, b []byte) error

	// Create or set data at path.
	//
	// Paths can be nested as long as they are even length components.
	// For example,
	//
	//   collection1/key1 (OK)
	//   collection1/key1/collection2/key2 (OK)
	//   collection1 (INVALID)
	//   collection1/key1/collection2 (INVALID)
	//
	Set(ctx context.Context, path string, b []byte) error

	// Get path.
	// If not found, returns nil.
	Get(ctx context.Context, path string) (*Document, error)

	// GetAll at paths.
	// If a path is not found, it is ignored.
	GetAll(ctx context.Context, paths []string) ([]*Document, error)

	// Exists, if exists at path.
	Exists(ctx context.Context, path string) (bool, error)

	// Delete at path.
	Delete(ctx context.Context, path string) (bool, error)
	// If a path is not found, it is ignored.
	DeleteAll(ctx context.Context, paths []string) error

	// DocumentIterator.
	DocumentIterator(ctx context.Context, parent string, opt ...DocumentsOption) (DocumentIterator, error)

	// Documents ...
	Documents(ctx context.Context, parent string, opt ...DocumentsOption) ([]*Document, error)

	// Collections are parents of Documents.
	Collections(ctx context.Context, parent string) ([]*Collection, error)
}

DocumentStore is a place for Documents.

type DocumentsOption

type DocumentsOption func(*DocumentsOptions)

DocumentsOption ...

func Index

func Index(index int) DocumentsOption

Index to start at.

func Limit

func Limit(limit int) DocumentsOption

Limit number of results.

func NoData

func NoData() DocumentsOption

NoData don't return data.

func Prefix

func Prefix(prefix string) DocumentsOption

Prefix to list.

type DocumentsOptions

type DocumentsOptions struct {
	// Prefix to filter on.
	Prefix string
	// Index is offset into number of documents.
	Index int
	// Limit is number of documents (max) to return.
	Limit int
	// NoData to only include only path in Document (no data).
	NoData bool
}

DocumentsOptions ...

func NewDocumentsOptions

func NewDocumentsOptions(opts ...DocumentsOption) DocumentsOptions

NewDocumentsOptions parses DocumentsOptions.

type ErrPathExists

type ErrPathExists struct {
	Path string
}

ErrPathExists is trying to set value that already exists.

func NewErrPathExists

func NewErrPathExists(path string) ErrPathExists

NewErrPathExists ...

func (ErrPathExists) Error

func (e ErrPathExists) Error() string

type Event

type Event struct {
	// Data for event.
	Data []byte `json:"data" msgpack:"dat" firestore:"data"`

	// Index for event (read only).
	Index int64 `json:"idx" msgpack:"idx" firestore:"idx"`
	// Timestamp (read only). The time at which the event was created.
	// Firestore sets this to the document create time.
	Timestamp time.Time `json:"ts" msgpack:"ts" firestore:"-"`
}

Event in an event log. If this format changes, you should also change in firestore and other backends that don't directly use this struct on set.

type EventIterator

type EventIterator interface {
	// Next document, or nil.
	Next() (*Event, error)
	// Release resources associated with the iterator.
	Release()
}

EventIterator is an iterator for Event's.

func NewEventIterator

func NewEventIterator(events []*Event) EventIterator

NewEventIterator returns an iterator for a Event slice.

type Events

type Events interface {
	// EventsAdd appends an event.
	EventsAdd(ctx context.Context, path string, data [][]byte) ([]*Event, error)
	// Events from index.
	Events(ctx context.Context, path string, index int64, limit int, direction Direction) (EventIterator, error)
}

Events describes an append only event log.

type LogLevel

type LogLevel int

LogLevel ...

const (
	// DebugLevel ...
	DebugLevel LogLevel = 3
	// InfoLevel ...
	InfoLevel LogLevel = 2
	// WarnLevel ...
	WarnLevel LogLevel = 1
	// ErrLevel ...
	ErrLevel LogLevel = 0
)

func (LogLevel) String

func (l LogLevel) String() string

type Logger

type Logger interface {
	Debugf(format string, args ...interface{})
	Infof(format string, args ...interface{})
	Warningf(format string, args ...interface{})
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
}

Logger interface used in this package.

func NewLogger

func NewLogger(lev LogLevel) Logger

NewLogger ...

type Mem

type Mem struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

Mem is an in memory DocumentStore implementation.

func NewMem

func NewMem() *Mem

NewMem creates an in memory DocumentStore implementation.

func (*Mem) Collections

func (m *Mem) Collections(ctx context.Context, parent string) ([]*Collection, error)

Collections ...

func (*Mem) Create

func (m *Mem) Create(ctx context.Context, path string, b []byte) error

Create at path. ErrPathExists if entry already exists.

func (*Mem) Delete

func (m *Mem) Delete(ctx context.Context, path string) (bool, error)

Delete ...

func (*Mem) DeleteAll

func (m *Mem) DeleteAll(ctx context.Context, paths []string) error

DeleteAll ...

func (*Mem) DocumentIterator

func (m *Mem) DocumentIterator(ctx context.Context, parent string, opt ...DocumentsOption) (DocumentIterator, error)

DocumentIterator ...

func (*Mem) Documents

func (m *Mem) Documents(ctx context.Context, parent string, opt ...DocumentsOption) ([]*Document, error)

Documents ...

func (*Mem) Events

func (m *Mem) Events(ctx context.Context, path string, index int64, limit int, direction Direction) (EventIterator, error)

Events ...

func (*Mem) EventsAdd

func (m *Mem) EventsAdd(ctx context.Context, path string, data [][]byte) ([]*Event, error)

EventsAdd ...

func (*Mem) Exists

func (m *Mem) Exists(ctx context.Context, path string) (bool, error)

Exists returns true if path exists.

func (*Mem) Get

func (m *Mem) Get(ctx context.Context, path string) (*Document, error)

Get data at path.

func (*Mem) GetAll

func (m *Mem) GetAll(ctx context.Context, paths []string) ([]*Document, error)

GetAll paths.

func (*Mem) Now

func (m *Mem) Now() time.Time

Now returns current time.

func (*Mem) Set

func (m *Mem) Set(ctx context.Context, path string, b []byte) error

Set data at path.

func (*Mem) SetTimeNow

func (m *Mem) SetTimeNow(nowFn func() time.Time)

SetTimeNow to use a custom time.Now.

type SpewFormat

type SpewFormat string

SpewFormat is format for Spew.

const (
	// SpewFormatDefault ...
	SpewFormatDefault SpewFormat = ""
	// SpewFormatTable is in a grid, each entry separated by newlines.
	SpewFormatTable SpewFormat = "table"
	// SpewFormatFlat are fields separated by newlines and entries separated by empty lines.
	SpewFormatFlat SpewFormat = "flat"
)

type SpewOption

type SpewOption func(*SpewOptions)

SpewOption ...

func WithSpewFormat

func WithSpewFormat(format SpewFormat) SpewOption

WithSpewFormat ...

type SpewOptions

type SpewOptions struct {
	Format SpewFormat
}

SpewOptions are options for Spew.

type StringSet

type StringSet struct {
	// contains filtered or unexported fields
}

StringSet is a set of strings.

func NewStringSet

func NewStringSet(s ...string) *StringSet

NewStringSet creates StringSet.

func NewStringSetSplit

func NewStringSetSplit(s string, delim string) *StringSet

NewStringSetSplit creates StringSet for split string.

func NewStringSetWithCapacity

func NewStringSetWithCapacity(capacity int) *StringSet

NewStringSetWithCapacity ..

func (*StringSet) Add

func (s *StringSet) Add(str string)

Add to set.

func (*StringSet) AddAll

func (s *StringSet) AddAll(strs []string)

AddAll to set.

func (*StringSet) Clear

func (s *StringSet) Clear()

Clear set.

func (*StringSet) Contains

func (s *StringSet) Contains(str string) bool

Contains returns true if set contains string.

func (*StringSet) Remove

func (s *StringSet) Remove(str string)

Remove from set.

func (*StringSet) Size

func (s *StringSet) Size() int

Size for set.

func (*StringSet) Sorted

func (s *StringSet) Sorted() []string

Sorted returns strings in set, sorted.

func (*StringSet) Strings

func (s *StringSet) Strings() []string

Strings returns strings in set.

Jump to

Keyboard shortcuts

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