config

package
v1.0.20 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2023 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package config provides the Driver interface. All config drivers must implement this interface, register themselves, optionally provide a `WithInstance` function and pass the tests in package config/testing.

Index

Examples

Constants

View Source
const NilVersion int = -1

Variables

View Source
var (
	ErrLocked    = fmt.Errorf("can't acquire lock")
	ErrNotLocked = fmt.Errorf("can't unlock, as not currently locked")
)

Functions

func CasRestoreOnErr

func CasRestoreOnErr(lock *atomic.Bool, o, n bool, casErr error, f func() error) error

CasRestoreOnErr CAS wrapper to automatically restore the lock state on error

func GenerateAdvisoryLockId

func GenerateAdvisoryLockId(configName string, additionalNames ...string) (string, error)

GenerateAdvisoryLockId inspired by rails migrations, see https://goo.gl/8o9bCT

func List

func List() []string

List lists the registered drivers

func Register

func Register(name string, driver Driver)

Register globally registers a driver.

Types

type Driver

type Driver interface {
	// Open returns a new driver instance configured with parameters
	// coming from the URL string. Migrate will call this function
	// only once per instance.
	Open(url string) (Driver, error)

	// Close closes the underlying config instance managed by the driver.
	// Migrate will call this function only once per instance.
	Close() error

	// Lock should acquire a config lock so that only one migration process
	// can run at a time. Migrate will call this function before Run is called.
	// If the implementation can't provide this functionality, return nil.
	// Return config.ErrLocked if config is already locked.
	Lock() error

	// Unlock should release the lock. Migrate will call this function after
	// all migrations have been run.
	Unlock() error

	// Run applies a migration to the config. migration is guaranteed to be not nil.
	Run(migration io.Reader) error

	// Version returns the currently active version and if the config is dirty.
	// When no migration has been applied, it must return version -1.
	// Dirty means, a previous migration failed and user interaction is required.
	Version() (version int, err error)

	// Drop deletes everything in the config.
	// Note that this is a breaking action, a new call to Open() is necessary to
	// ensure subsequent calls work as expected.
	Drop() error
}

Driver is the interface every config driver must implement.

Example
// see config/stub for an example

// config/stub/stub.go has the driver implementation
// config/stub/stub_test.go runs config/testing/test.go:Test
Output:

func Open

func Open(path string) (Driver, error)

Open returns a new driver instance.

type Error

type Error struct {
	// Optional: the line number
	Line uint

	// Query is a query excerpt
	Query []byte

	// Err is a useful/helping error message for humans
	Err string

	// OrigErr is the underlying error
	OrigErr error
}

Error should be used for errors involving queries ran against the config

func (Error) Error

func (e Error) Error() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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