values

package
v0.97.0 Latest Latest
Warning

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

Go to latest
Published: Nov 30, 2020 License: MIT Imports: 17 Imported by: 30

Documentation

Overview

Package values declares the flux data types and implements them.

Index

Constants

This section is empty.

Variables

View Source
var (
	// InvalidValue is a non nil value who's type is semantic.Invalid
	InvalidValue = value{}

	// Null is an untyped nil value.
	Null = null{}
)

Functions

func AllLabels added in v0.68.0

func AllLabels() labelSet

AllLabels returns a label set that represents the infinite set of all possible string labels.

func CheckKind

func CheckKind(got, exp semantic.Nature)

CheckKind panics if got != exp.

func FormattedScope added in v0.40.0

func FormattedScope(scope Scope) fmt.Formatter

FormattedScope produces a fmt.Formatter for pretty printing a scope.

func IsTimeable added in v0.70.0

func IsTimeable(v Value) bool

IsTimeable checks if value v is Timeable.

func NewFunction

func NewFunction(name string, typ semantic.MonoType, call func(ctx context.Context, args Object) (Value, error), sideEffect bool) *function

NewFunction returns a new function value. This function will panic if it is passed anything other than a function type.

func UnexpectedKind

func UnexpectedKind(got, exp semantic.Nature) error

func Unwrap added in v0.69.0

func Unwrap(v Value) interface{}

Unwrap will extract the primitive value from the Value interface.

Types

type Array

type Array interface {
	Value
	Get(i int) Value
	Set(i int, v Value)
	Append(v Value)
	Len() int
	Range(func(i int, v Value))
	Sort(func(i, j Value) bool)
}

Array represents an sequence of elements All elements must be the same type

func NewArray

func NewArray(arrType semantic.MonoType) Array

func NewArrayWithBacking

func NewArrayWithBacking(arrType semantic.MonoType, elements []Value) Array

type BinaryFuncSignature

type BinaryFuncSignature struct {
	Operator    ast.OperatorKind
	Left, Right semantic.Nature
}

type BinaryFunction

type BinaryFunction func(l, r Value) (Value, error)

func LookupBinaryFunction

func LookupBinaryFunction(sig BinaryFuncSignature) (BinaryFunction, error)

LookupBinaryFunction returns an appropriate binary function that evaluates two values and returns another value. If the two types are not compatible with the given operation, this returns an error.

type Dictionary added in v0.96.0

type Dictionary interface {
	Value

	// Get will retrieve a Value out of the Dictionary.
	// If the key is not present, the def Value will
	// be returned instead.
	Get(key, def Value) Value

	// Insert will insert a Value into the Dictionary
	// using the key and value. It will return a new
	// Dictionary with the key/value inserted. If the
	// key was already in the Dictionary, it will
	// be replaced.
	//
	// Attempting to insert a null value for the key
	// will return an error.
	Insert(key, value Value) (Dictionary, error)

	// Remove will remove the key/value pair that
	// matches with the key. It will return a new
	// Dictionary with the key/value removed.
	Remove(key Value) Dictionary

	// Range will iterate over each element in
	// the Dictionary.
	Range(func(key, value Value))

	// Len returns the number of elements inside of
	// Dictionary.
	Len() int
}

Dictionary defines the interface for a dictionary.

A Dictionary is immutable. Changes to a Dictionary will return a new Dictionary.

func NewDict added in v0.96.0

func NewDict(dictType semantic.MonoType) Dictionary

NewDict will construct a new Dictionary with the given key type.

type DictionaryBuilder added in v0.96.0

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

DictionaryBuilder can be used to construct a Dictionary with in-place memory instead of successive Insert calls that create new Dictionary values.

func NewDictBuilder added in v0.96.0

func NewDictBuilder(dictType semantic.MonoType) DictionaryBuilder

NewDictBuilder will create a new DictionaryBuilder for the given key type.

func (*DictionaryBuilder) Dict added in v0.96.0

func (d *DictionaryBuilder) Dict() Dictionary

Dict will construct a new Dictionary using the inserted values.

func (*DictionaryBuilder) Get added in v0.96.0

func (d *DictionaryBuilder) Get(key Value) (Value, bool)

Get will retrieve a Value if it is present.

func (*DictionaryBuilder) Insert added in v0.96.0

func (d *DictionaryBuilder) Insert(key, value Value) error

Insert will insert a new key/value pair into the Dictionary.

func (*DictionaryBuilder) Remove added in v0.96.0

func (d *DictionaryBuilder) Remove(key Value)

Remove will remove a key/value pair from the Dictionary.

type Duration

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

Duration is a vector representing the duration unit components.

func ConvertDurationMonths added in v0.83.3

func ConvertDurationMonths(v time.Duration) Duration

ConvertDurationMonths takes a time.Duration and converts it into a Duration with months.

func ConvertDurationNsecs added in v0.84.0

func ConvertDurationNsecs(v time.Duration) Duration

ConvertDurationNsecs takes a time.Duration and converts it into a Duration with nanoseconds.

func FromDurationValues added in v0.53.0

func FromDurationValues(dur []ast.Duration) (d Duration, err error)

FromDurationValues creates a duration value from the duration values.

func MakeDuration added in v0.83.3

func MakeDuration(nsecs int64, months int64, negative bool) Duration

MakeDuration takes nanoseconds and months as int64 and negative as a bool to construct a Duration with mixed units

func ParseDuration

func ParseDuration(s string) (Duration, error)

func (Duration) AsValues added in v0.53.0

func (d Duration) AsValues() []ast.Duration

AsValues will reconstruct the duration as a set of values. All of the components will be positive numbers.

func (Duration) Duration

func (d Duration) Duration() time.Duration

Duration will return the nanosecond equivalent of this duration. It will assume that all months are the same length.

It is recommended not to use this method unless it is absolutely needed. This method will lose any precision that is present in the Duration and it should only be used for interfacing with outside code that is not month-aware.

func (Duration) Equal added in v0.51.0

func (d Duration) Equal(other Duration) bool

Equal returns true if the two durations are equal.

func (Duration) IsNegative added in v0.53.0

func (d Duration) IsNegative() bool

IsNegative returns true if this is a negative number. It returns false if the number is zero.

func (Duration) IsPositive added in v0.51.0

func (d Duration) IsPositive() bool

IsPositive returns true if this is a positive number. It returns false if the number is zero.

func (Duration) IsZero added in v0.51.0

func (d Duration) IsZero() bool

IsZero returns true if this is a zero duration.

func (Duration) MarshalText added in v0.51.0

func (d Duration) MarshalText() ([]byte, error)

func (Duration) Months added in v0.53.0

func (d Duration) Months() int64

func (Duration) MonthsOnly added in v0.92.0

func (d Duration) MonthsOnly() bool

MonthsOnly returns true if this duration does not have a nanosecond component.

func (Duration) Mul added in v0.51.0

func (d Duration) Mul(scale int) Duration

Mul will multiply the Duration by a scalar. This multiplies each component of the vector.

func (Duration) NanoOnly added in v0.92.0

func (d Duration) NanoOnly() bool

NanoOnly returns true if this duration does not have a month component.

func (Duration) Nanoseconds added in v0.53.0

func (d Duration) Nanoseconds() int64

func (Duration) Normalize added in v0.51.0

func (d Duration) Normalize(interval Duration) Duration

Normalize will normalize the duration within the interval. It will ensure that the output duration is the smallest positive duration that is the equivalent of the current duration.

func (Duration) String

func (d Duration) String() string

func (*Duration) UnmarshalText added in v0.51.0

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

type Function

type Function interface {
	Value
	HasSideEffect() bool
	Call(ctx context.Context, args Object) (Value, error)
}

Function represents a callable type

type Object

type Object interface {
	Value
	Get(name string) (Value, bool)

	// Set will set the object value for the given key.
	// The key must be part of the object property's type and the
	// value that is set must match that type. It is undefined
	// behavior to set a non-existant value or to set a value
	// with the wrong type.
	Set(name string, v Value)

	Len() int
	Range(func(name string, v Value))
}

func BuildObject added in v0.68.0

func BuildObject(fn func(set ObjectSetter) error) (Object, error)

BuildObject will build an object by setting key/value pairs. The records in the object get constructed in the order they are set and resetting a key will overwrite a previous value, but will retain the existing position.

func BuildObjectWithSize added in v0.68.0

func BuildObjectWithSize(sz int, fn func(set ObjectSetter) error) (Object, error)

BuildObjectWithSize will build an object with an initial size.

func NewObject

func NewObject(typ semantic.MonoType) Object

NewObject will create a new object with the given type. The type must be of kind Row. The new object will be uninitialized and must be constructed with Set on each of the property keys before it is used.

func NewObjectWithValues

func NewObjectWithValues(vals map[string]Value) Object

type ObjectSetter added in v0.68.0

type ObjectSetter func(k string, v Value)

ObjectSetter will set the value for the key. If the key already exists, it will be overwritten with the new value.

type Option added in v0.68.0

type Option struct {
	Value
}

Option is a value that has been declared as an option within the package. An option can be modified by another package from outside of the scope that the option was originally defined in, but it will affect the original scope it was defined in.

type Package added in v0.41.0

type Package interface {
	Object

	// Name returns the package name.
	Name() string

	// Path returns the canonical import path for this package.
	Path() string
}

type Scope added in v0.40.0

type Scope interface {
	// Lookup a name in the scope.
	Lookup(name string) (Value, bool)

	// LocalLookup a name in current scope only.
	LocalLookup(name string) (Value, bool)

	// Set binds a variable in the current scope.
	Set(name string, v Value)

	// Nest creates a new scope by nesting the current scope.
	// If the passed in object is not nil, its values will be added to the new nested scope.
	Nest(Object) Scope

	// Pop returns the parent of the current scope.
	Pop() Scope

	// Size is the number of visible names in scope.
	Size() int

	// Range iterates over all variable bindings in scope applying f.
	Range(f func(k string, v Value))

	// LocalRange iterates over all variable bindings only in the current scope.
	LocalRange(f func(k string, v Value))

	// SetReturn binds the return value of the scope.
	SetReturn(Value)

	// Return reports the bound return value of the scope.
	Return() Value

	// Copy creates a deep copy of the scope, values are not copied.
	// Copy preserves the nesting structure.
	Copy() Scope
}

func NewNestedScope added in v0.40.0

func NewNestedScope(parent Scope, obj Object) Scope

NewNestedScope creates a new scope with bindings from obj and a parent.

func NewScope added in v0.40.0

func NewScope() Scope

NewScope creates a new empty scope with no parent.

type Time

type Time int64

func ConvertTime

func ConvertTime(t time.Time) Time

func ParseTime

func ParseTime(s string) (Time, error)

func (Time) Add

func (t Time) Add(d Duration) Time

func (Time) Remainder added in v0.19.0

func (t Time) Remainder(d Duration) (r Duration)

Remainder divides t by d and returns the remainder.

func (Time) Round

func (t Time) Round(d Duration) Time

func (Time) String

func (t Time) String() string

func (Time) Sub added in v0.51.0

func (t Time) Sub(other Time) Duration

Sub takes another time and returns a duration giving the duration between the two times. A positive duration indicates that the receiver occurs after the other time.

func (Time) Time

func (t Time) Time() time.Time

type Typer

type Typer interface {
	Type() semantic.MonoType
}

type Value

type Value interface {
	Typer
	IsNull() bool
	Str() string
	Bytes() []byte
	Int() int64
	UInt() uint64
	Float() float64
	Bool() bool
	Time() Time
	Duration() Duration
	Regexp() *regexp.Regexp
	Array() Array
	Object() Object
	Function() Function
	Dict() Dictionary
	Equal(Value) bool
}

func New

func New(v interface{}) Value

New constructs a new Value by inferring the type from the interface. Note this method will panic if passed a nil value. If the interface does not translate to a valid Value type, then InvalidValue is returned.

func NewBool

func NewBool(v bool) Value

func NewBytes added in v0.40.0

func NewBytes(v []byte) Value

func NewDuration

func NewDuration(v Duration) Value

func NewFloat

func NewFloat(v float64) Value

func NewInt

func NewInt(v int64) Value

func NewNull added in v0.14.0

func NewNull(t semantic.MonoType) Value

func NewRegexp

func NewRegexp(v *regexp.Regexp) Value

func NewString

func NewString(v string) Value

func NewTime

func NewTime(v Time) Value

func NewUInt

func NewUInt(v uint64) Value

func SetOption added in v0.68.0

func SetOption(p Package, name string, v Value) (Value, bool)

SetOption will set an option on the package and return the value representing the option.

type ValueStringer added in v0.23.0

type ValueStringer interface {
	String() string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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