1
0
mirror of https://github.com/MontFerret/ferret.git synced 2024-12-16 11:37:36 +02:00
ferret/pkg/runtime/core/value.go

53 lines
1.3 KiB
Go
Raw Normal View History

2018-09-18 22:42:38 +02:00
package core
import (
"context"
2018-09-18 22:42:38 +02:00
"encoding/json"
)
type (
// Value represents an interface of
// any type that needs to be used during runtime
Value interface {
json.Marshaler
Type() Type
String() string
Compare(other Value) int64
Unwrap() interface{}
Hash() uint64
Copy() Value
2018-09-18 22:42:38 +02:00
}
// Iterable represents an interface of a value that can be iterated by using an iterator.
Iterable interface {
Iterate(ctx context.Context) (Iterator, error)
}
// Iterator represents an interface of a value iterator.
// When iterator is exhausted it must return None as a value.
Iterator interface {
Next(ctx context.Context) (value Value, key Value, err error)
}
// Getter represents an interface of
// complex types that needs to be used to read values by path.
// The interface is created to let user-defined types be used in dot notation data access.
Getter interface {
GetIn(ctx context.Context, path []Value) (Value, error)
2018-09-18 22:42:38 +02:00
}
// Setter represents an interface of
// complex types that needs to be used to write values by path.
// The interface is created to let user-defined types be used in dot notation assignment.
Setter interface {
SetIn(ctx context.Context, path []Value, value Value) error
}
// PairValueType is a supporting
// structure that used in validateValueTypePairs.
PairValueType struct {
Value Value
Types []Type
}
)