flu

package module
v0.10.4 Latest Latest
Warning

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

Go to latest
Published: Nov 14, 2021 License: GPL-3.0 Imports: 21 Imported by: 14

README

flu

ci Go Reference

A collection of common utilities used throughout my projects.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var TimeLayout = "2006-01-02 15:04:05"

TimeLayout is the default layout used while parsing Time from a string.

Functions

func AwaitSignal

func AwaitSignal(signals ...os.Signal)

AwaitSignal blocks until a signal is received. By default listens to SIGINT, SIGABRT, SIGKILL, SIGTERM.

func Close

func Close(value interface{}) error

Close attempts to close the provided value using io.Closer interface.

func CloseQuietly

func CloseQuietly(value interface{})

CloseQuietly attempts to close the provided value using io.Closer with logging on error.

func Copy

func Copy(in Input, out Output) (written int64, err error)

Copy copies the Input to the Output.

func DecodeFrom

func DecodeFrom(in Input, decoder DecoderFrom) error

DecodeFrom decodes the provided DecoderFrom from Input. It closes the io.Reader instance if necessary.

func EncodeTo

func EncodeTo(encoder EncoderTo, out Output) error

EncodeTo encodes the provided EncoderTo to Output. It closes the io.Writer instance if necessary.

func IsContextRelated

func IsContextRelated(err error) bool

IsContextRelated checks if this is a "context" package error.

func IsNetworkRelated

func IsNetworkRelated(err error) bool

IsNetworkRelated checks if this is a net.Error.

func Sleep

func Sleep(ctx context.Context, timeout time.Duration) error

Sleep sleeps for the specified timeout interruptibly.

func ToString

func ToString(in Input) (string, error)

ToString reads an Input to a string.

Types

type AnyCloser

type AnyCloser struct {
	V interface{}
}

AnyCloser wraps the provided value with io.Closer interface.

func (AnyCloser) Close

func (c AnyCloser) Close() error

type ByteBuffer

type ByteBuffer bytes.Buffer

ByteBuffer is an Input / Output wrapper around bytes.Buffer.

func (*ByteBuffer) Bytes

func (b *ByteBuffer) Bytes() Bytes

Bytes returns read-only Bytes view on this buffer.

func (*ByteBuffer) Reader

func (b *ByteBuffer) Reader() (io.Reader, error)

func (*ByteBuffer) Unmask

func (b *ByteBuffer) Unmask() *bytes.Buffer

Unmask returns the underlying *bytes.Buffer.

func (*ByteBuffer) Writer

func (b *ByteBuffer) Writer() (io.Writer, error)

type Bytes

type Bytes []byte

Bytes is a read-only byte array.

func (Bytes) Reader

func (b Bytes) Reader() (io.Reader, error)

func (Bytes) String added in v0.9.31

func (b Bytes) String() string

type Chars

type Chars struct {
	// In is the underlying Input.
	In Input
	// Out is the underlying Output.
	Out Output
	// Enc will be used for decoding characters from Input
	// and/or encoding them to Output.
	Enc encoding.Encoding
}

Chars is the text character Input / Output wrapper.

func (Chars) Reader

func (cs Chars) Reader() (io.Reader, error)

func (Chars) Writer

func (cs Chars) Writer() (io.Writer, error)

type Clock

type Clock interface {

	// Now returns the current time according to this Clock.
	Now() time.Time
}

Clock is an interface for clocks returning current time.

var DefaultClock Clock = ClockFunc(time.Now)

DefaultClock uses time.Now to provide current time.

type ClockFunc

type ClockFunc func() time.Time

ClockFunc is a functional adapter.

func (ClockFunc) Now

func (fun ClockFunc) Now() time.Time

type Codec

type Codec func(interface{}) ValueCodec

Codec creates a ValueCodec for a given value.

type Conn

type Conn struct {
	// Dialer is the net.Dialer to be used for connection.
	// May be empty.
	Dialer net.Dialer

	// Context is the context.ctx to be used.
	// May be empty.
	Context context.Context

	// Network is the network passed to Dialer.Dial.
	Network string

	// Address is the address passed to Dialer.Dial.
	Address string
}

Conn provides the means for opening net.Conn.

func (Conn) Dial

func (c Conn) Dial() (net.Conn, error)

Dial opens a net.Conn using the provided struct fields.

func (Conn) Reader

func (c Conn) Reader() (io.Reader, error)

func (Conn) Writer

func (c Conn) Writer() (io.Writer, error)

type ContextFunc

type ContextFunc func(parent context.Context) (context.Context, context.CancelFunc)

ContextFunc creates a child context.Context from a given one.

func Deadline

func Deadline(deadline time.Time) ContextFunc

Deadline returns ContextFunc which uses cpntext.WithDeadline.

func Timeout

func Timeout(timeout time.Duration) ContextFunc

Timeout returns ContextFunc which uses context.WithTimeout.

type Counter

type Counter int64

Counter is an int64 counter.

func (*Counter) Add

func (c *Counter) Add(n int64)

Add adds an int64 value to the counter.

func (*Counter) Value

func (c *Counter) Value() int64

Value returns the current value of the *Counter.

type DecoderFrom

type DecoderFrom interface {
	// DecodeFrom decodes the value from the given io.Reader.
	DecodeFrom(io.Reader) error
}

DecoderFrom interface describes a value which can be decoded.

type Duration

type Duration time.Duration

Duration provides useful serialization methods for time.Duration.

func (*Duration) FromString

func (d *Duration) FromString(str string) error

FromString parses the duration from a string value.

func (Duration) GetOrDefault

func (d Duration) GetOrDefault(defaultValue time.Duration) time.Duration

GetOrDefault returns the value if d > 0 or the provided default value otherwise.

func (*Duration) UnmarshalJSON

func (d *Duration) UnmarshalJSON(data []byte) error

func (*Duration) UnmarshalYAML

func (d *Duration) UnmarshalYAML(node *yaml.Node) error

func (Duration) Unmask

func (d Duration) Unmask() time.Duration

Unmask returns actual time.Duration value.

type EncoderTo

type EncoderTo interface {
	// EncodeTo encodes the value to the given io.Writer.
	EncodeTo(io.Writer) error
}

EncoderTo interface describes a value which can be encoded.

type File

type File string

File is a path representing a file (or directory).

func FilePath

func FilePath(path ...string) File

FilePath creates a File instance from the provided path parts.

func (File) Append added in v0.10.3

func (f File) Append() (*os.File, error)

func (File) Create

func (f File) Create() (*os.File, error)

Create opens the File for writing. It creates the file and all intermediate directories if necessary.

func (File) CreateParent added in v0.10.3

func (f File) CreateParent() error

func (File) Exists

func (f File) Exists() (bool, error)

Exists checks for the existence of the File entry.

func (File) Join

func (f File) Join(child string) File

Join creates a new File instance pointing to the child element of this instance.

func (File) Open

func (f File) Open() (*os.File, error)

Open opens the File for reading.

func (File) Path

func (f File) Path() string

Path returns the underlying string.

func (File) Reader

func (f File) Reader() (io.Reader, error)

func (File) Remove

func (f File) Remove() error

Remove removes the file or directory represented by this File.

func (File) Writer

func (f File) Writer() (io.Writer, error)

type IO

type IO struct {
	// R is an io.Reader instance to be used for reading.
	R io.Reader
	// W is an io.Writer instance to be used for reading.
	W io.Writer
	// E is an error which will be returned when reading/writing.
	E error
}

IO is a generic Input / Output. It is not mandatory to fill all struct fields.

func (IO) Reader

func (io IO) Reader() (io.Reader, error)

func (IO) Writer

func (io IO) Writer() (io.Writer, error)

type IOCounter

type IOCounter struct {
	Input
	Output
	Counter
}

IOCounter is a counting wrapper for Input and/or Output.

func (*IOCounter) Reader

func (c *IOCounter) Reader() (r io.Reader, err error)

func (*IOCounter) Writer

func (c *IOCounter) Writer() (w io.Writer, err error)

type Input

type Input interface {
	// Reader returns an instance of io.Reader.
	Reader() (io.Reader, error)
}

Input interface describes a resource which can be read (possibly more than once).

func PipeInput

func PipeInput(encoder EncoderTo) Input

PipeInput pipes the encoded value from EncoderTo as Input in the background.

type Int64Set added in v0.10.1

type Int64Set map[int64]bool

Int64Set emulates a int64 set.

func (Int64Set) Add added in v0.10.1

func (s Int64Set) Add(values ...int64) Int64Set

Add adds the values to the set.

func (Int64Set) Copy added in v0.10.1

func (s Int64Set) Copy() Int64Set

Copy creates a copy of this set.

func (Int64Set) MarshalJSON added in v0.10.1

func (s Int64Set) MarshalJSON() ([]byte, error)

func (Int64Set) MarshalYAML added in v0.10.1

func (s Int64Set) MarshalYAML() (interface{}, error)

func (Int64Set) Slice added in v0.10.1

func (s Int64Set) Slice() []int64

Slice creates a slice containing all values from this set in no particular order.

func (*Int64Set) UnmarshalJSON added in v0.10.1

func (s *Int64Set) UnmarshalJSON(data []byte) error

func (*Int64Set) UnmarshalYAML added in v0.10.1

func (s *Int64Set) UnmarshalYAML(node *yaml.Node) error

type Mutex

type Mutex struct {
	sync.Mutex
}

Mutex is a fluent wrapper for sync.RWMutex.

func (*Mutex) Lock

func (mu *Mutex) Lock() Unlocker

func (*Mutex) Unlock

func (mu *Mutex) Unlock()

type Output

type Output interface {
	// Writer returns an instance of io.Writer.
	Writer() (io.Writer, error)
}

Output interface describes a resource which can be written (possibly more than once).

func PipeOutput

func PipeOutput(decoder DecoderFrom) Output

PipeOutput provides an Output which feeds into DecoderFrom in the background.

type RWMutex

type RWMutex struct {
	sync.RWMutex
}

RWMutex is a wrapper for stdlib sync.RWMutex providing fluent lock/unlock syntax.

var mu sync.RWMutex = ...
defer mu.RLock().Unlock()
// some operations which require exclusive read- and/or write-access.

func (*RWMutex) Lock

func (mu *RWMutex) Lock() Unlocker

func (*RWMutex) RLock

func (mu *RWMutex) RLock() Unlocker

func (*RWMutex) RUnlock

func (mu *RWMutex) RUnlock()

func (*RWMutex) Unlock

func (mu *RWMutex) Unlock()

type RateLimiter

type RateLimiter interface {

	// Start "takes the lock".
	Start(ctx context.Context) error

	// Complete "releases the lock".
	Complete()
}

RateLimiter allows to control the frequency of some action.

var RateUnlimiter RateLimiter = rateUnlimiter{}

RateUnlimiter is a no-op rate limiter.

func ConcurrencyRateLimiter

func ConcurrencyRateLimiter(concurrency int) RateLimiter

ConcurrencyRateLimiter applies concurrency limit.

func IntervalRateLimiter

func IntervalRateLimiter(interval time.Duration) RateLimiter

IntervalRateLimiter applies interval rate limit.

type ReaderCounter

type ReaderCounter struct {
	io.Reader
	*Counter
}

ReaderCounter is a counting io.Reader. Useful for calculating the total size of read data.

func (ReaderCounter) Close

func (rc ReaderCounter) Close() error

func (ReaderCounter) Read

func (rc ReaderCounter) Read(data []byte) (n int, err error)

type StringSet added in v0.10.1

type StringSet map[string]bool

StringSet emulates a string set with JSON and YAML serialization support.

func (StringSet) Add added in v0.10.1

func (s StringSet) Add(values ...string) StringSet

Add adds values to the set.

func (StringSet) AnyMatch added in v0.10.1

func (s StringSet) AnyMatch(matcher func(key string) bool) bool

AnyMatch checks if any elements match some predicate.

func (StringSet) Copy added in v0.10.1

func (s StringSet) Copy() StringSet

Copy creates a copy of this set.

func (StringSet) MarshalJSON added in v0.10.1

func (s StringSet) MarshalJSON() ([]byte, error)

func (StringSet) MarshalYAML added in v0.10.1

func (s StringSet) MarshalYAML() (interface{}, error)

func (StringSet) Slice added in v0.10.1

func (s StringSet) Slice() []string

Slice returns a slice containing all values from this set in no particular order.

func (*StringSet) UnmarshalJSON added in v0.10.1

func (s *StringSet) UnmarshalJSON(data []byte) error

func (*StringSet) UnmarshalYAML added in v0.10.1

func (s *StringSet) UnmarshalYAML(node *yaml.Node) error

type Text

type Text struct {
	Value string
}

Text encodes/decodes the provided value as plain text.

func (*Text) ContentType

func (v *Text) ContentType() string

func (*Text) DecodeFrom

func (v *Text) DecodeFrom(r io.Reader) error

func (*Text) EncodeTo

func (v *Text) EncodeTo(w io.Writer) error

type Time added in v0.10.1

type Time struct {
	time.Time

	// Layout may be used to custom string value layout.
	Layout string
}

Time is time.Time wrapper with serialization support.

func (*Time) FromString added in v0.10.1

func (t *Time) FromString(str string) error

FromString parses a string.

func (*Time) MarshalJSON added in v0.10.1

func (t *Time) MarshalJSON() ([]byte, error)

func (*Time) MarshalYAML added in v0.10.1

func (t *Time) MarshalYAML() (interface{}, error)

func (Time) String added in v0.10.1

func (t Time) String() string

func (*Time) UnmarshalJSON added in v0.10.1

func (t *Time) UnmarshalJSON(data []byte) error

func (*Time) UnmarshalYAML added in v0.10.1

func (t *Time) UnmarshalYAML(node *yaml.Node) error

type URL

type URL string

URL is a read-only resource accessible by URL.

func (URL) Reader

func (u URL) Reader() (io.Reader, error)

func (URL) Unmask

func (u URL) Unmask() string

Unmask returns the underlying string.

type Unlocker

type Unlocker interface {
	Unlock()
}

Unlocker is commonly a lock which can be unlocked.

type UnlockerFunc

type UnlockerFunc func()

UnlockerFunc is a functional adapter.

func (UnlockerFunc) Unlock

func (fun UnlockerFunc) Unlock()

type ValueCodec

type ValueCodec interface {
	EncoderTo
	DecoderFrom
}

ValueCodec is a value container with encoder and decoder.

func Gob

func Gob(value interface{}) ValueCodec

func JSON

func JSON(value interface{}) ValueCodec

JSON encodes/decodes the provided ValueCodec using JSON format.

func XML

func XML(value interface{}) ValueCodec

func YAML

func YAML(value interface{}) ValueCodec

type WaitGroup

type WaitGroup struct {
	sync.WaitGroup
}

WaitGroup is a sync.WaitGroup wrapper adding Go* utility methods for convenient goroutine management. Example:

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

var work flu.WaitGroup
// wait until all goroutines finish
defer work.Wait()

for i := 0; i < 10; i++ {
	_ = work.Go(ctx, func(ctx context.Context) {
		// do some async work
	})
}

func (*WaitGroup) Go

func (wg *WaitGroup) Go(ctx context.Context, fun func(ctx context.Context)) func()

Go is an alias for GoWith with a context.WithCancel.

func (*WaitGroup) GoWith

func (wg *WaitGroup) GoWith(ctx context.Context, contextFunc ContextFunc, fun func(ctx context.Context)) func()

GoWith starts a function with a child context created by a given ContextFunc. The sync.WaitGroup counter is incremented and decremented automatically. The child context is automatically canceled also, but is also returned for manual goroutine context cancellation. For example,

// service initialization
var work flu.WaitGroup
// wait for background work to finish on exit
defer work.Wait()

// launch a separate goroutine performing some periodic work
cancel := work.Go(ctx, func(ctx context.Context) {
	ticker := time.NewTicker(...)
	defer ticker.Stop()
	for {
		select {
		case <-ctx.Done():
			return
		case now := <-ticker.C:
			// perform some periodic work
		}
	}
})

// cancel the background task on exit
// can also write as defer work.Go(...)()
defer cancel()

// let it work for a minute and exit
// this causes the context to cancel and interrupt the goroutine
if err := flu.Sleep(ctx, time.Minute); err != nil {
	panic(err)
}

type WriterCounter

type WriterCounter struct {
	io.Writer
	*Counter
}

WriterCounter is a counting io.Writer. Useful for calculating the total size of written data.

func (WriterCounter) Close

func (wc WriterCounter) Close() error

func (WriterCounter) Write

func (wc WriterCounter) Write(data []byte) (n int, err error)

Directories

Path Synopsis
apfel contains utilities for generic application configuration and basic lifecycle management (setup/teardown).
apfel contains utilities for generic application configuration and basic lifecycle management (setup/teardown).
me3x package contains abstractions for reporting metrics to Graphite or Prometheus.
me3x package contains abstractions for reporting metrics to Graphite or Prometheus.

Jump to

Keyboard shortcuts

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