Documentation
¶
Overview ¶
Package object defines all available object types in Tamarin.
For external users of Tamarin, most often an object.Object interface will be type asserted to a specific object type, such as *object.Float.
For example:
switch obj := obj.(type) {
case *object.String:
// do something with obj.Value
case *object.Float:
// do something with obj.Value
}
The Type() method of each object may also be used to get a string name of the object type, such as "STRING" or "FLOAT".
Index ¶
- Constants
- Variables
- func AsArray(obj Object) (*Array, *Error)
- func AsHash(obj Object) (*Hash, *Error)
- func AsSet(obj Object) (*Set, *Error)
- func CompareTypes(a, b Object) int
- func IsError(obj Object) bool
- func ToGoType(obj Object) interface{}
- type Array
- type Boolean
- type BooleanConverter
- type BreakValue
- type Builtin
- type BuiltinFunction
- type Comparable
- type DatabaseConnection
- type DefaultProxyManager
- func (p *DefaultProxyManager) Call(obj interface{}, method string, args ...Object) Object
- func (p *DefaultProxyManager) GetType(obj interface{}) (*ProxyType, bool)
- func (p *DefaultProxyManager) HasType(obj interface{}) bool
- func (p *DefaultProxyManager) RegisterType(obj interface{}) (*ProxyType, error)
- type Error
- type ErrorConverter
- type Float
- type Float32Converter
- type Float64Converter
- type Function
- type Hash
- func (h *Hash) Delete(key string) Object
- func (h *Hash) Get(key string) Object
- func (h *Hash) GetWithObject(key *String) Object
- func (h *Hash) Inspect() string
- func (h *Hash) InvokeMethod(method string, args ...Object) Object
- func (h *Hash) Keys() *Array
- func (h *Hash) Set(key string, value Object)
- func (h *Hash) Size() int
- func (h *Hash) ToInterface() interface{}
- func (h *Hash) Type() Type
- func (h *Hash) Values() *Array
- type Hashable
- type HttpResponse
- func (r *HttpResponse) Inspect() string
- func (r *HttpResponse) InvokeMethod(method string, args ...Object) Object
- func (r *HttpResponse) JSON() (target interface{}, err error)
- func (r *HttpResponse) Text() (string, error)
- func (r *HttpResponse) ToInterface() interface{}
- func (r *HttpResponse) Type() Type
- type Int64Converter
- type IntConverter
- type Integer
- type Key
- type MapStringIfaceConverter
- type Module
- type Null
- type Object
- type Proxy
- type ProxyManager
- type ProxyManagerOpts
- type ProxyMethod
- type ProxyType
- type Regexp
- type Result
- type ReturnValue
- type Set
- func (s *Set) Add(items ...Object) error
- func (s *Set) Array() *Array
- func (s *Set) Contains(items ...Object) bool
- func (s *Set) Difference(other *Set) *Set
- func (s *Set) Inspect() string
- func (s *Set) Intersection(other *Set) *Set
- func (s *Set) InvokeMethod(method string, args ...Object) Object
- func (s *Set) Remove(items ...Object) error
- func (s *Set) Size() int
- func (s *Set) ToInterface() interface{}
- func (s *Set) Type() Type
- func (s *Set) Union(other *Set) *Set
- type String
- func (s *String) Compare(other Object) (int, error)
- func (s *String) HashKey() Key
- func (s *String) Inspect() string
- func (s *String) InvokeMethod(method string, args ...Object) Object
- func (s *String) Reversed() *String
- func (s *String) String() string
- func (s *String) ToInterface() interface{}
- func (s *String) Type() Type
- type StringConverter
- type StructConverter
- type Time
- type TimeConverter
- type Type
- type TypeConverter
Constants ¶
const ( INTEGER_OBJ = "INTEGER" FLOAT_OBJ = "FLOAT" BOOLEAN_OBJ = "BOOLEAN" NULL_OBJ = "NULL" RETURN_VALUE_OBJ = "RETURN_VALUE" BREAK_VALUE_OBJ = "BREAK_VALUE" ERROR_OBJ = "ERROR" FUNCTION_OBJ = "FUNCTION" STRING_OBJ = "STRING" BUILTIN_OBJ = "BUILTIN" ARRAY_OBJ = "ARRAY" HASH_OBJ = "HASH" FILE_OBJ = "FILE" REGEXP_OBJ = "REGEXP" SET_OBJ = "SET" MODULE_OBJ = "MODULE" RESULT_OBJ = "RESULT" HTTP_RESPONSE_OBJ = "HTTP_RESPONSE" DB_CONNECTION_OBJ = "DB_CONNECTION" TIME_OBJ = "TIME" PROXY_OBJ = "PROXY" )
Type constants
Variables ¶
Functions ¶
func CompareTypes ¶ added in v0.0.9
Types ¶
type Array ¶
type Array struct {
// Elements holds the individual members of the array we're wrapping.
Elements []Object
}
Array wraps Object array and implements Object interface.
func NewStringArray ¶ added in v0.0.4
func (*Array) InvokeMethod ¶
InvokeMethod invokes a method against the object. (Built-in methods only.)
func (*Array) ToInterface ¶
func (ao *Array) ToInterface() interface{}
type Boolean ¶
type Boolean struct {
// Value holds the boolean value we wrap.
Value bool
}
Boolean wraps bool and implements Object and Hashable interface.
func NewBoolean ¶ added in v0.0.4
func (*Boolean) ToInterface ¶
func (b *Boolean) ToInterface() interface{}
type BooleanConverter ¶ added in v0.0.9
type BooleanConverter struct{}
BooleanConverter converts between bool and Boolean.
func (*BooleanConverter) From ¶ added in v0.0.9
func (c *BooleanConverter) From(obj interface{}) (Object, error)
func (*BooleanConverter) To ¶ added in v0.0.9
func (c *BooleanConverter) To(obj Object) (interface{}, error)
func (*BooleanConverter) Type ¶ added in v0.0.9
func (c *BooleanConverter) Type() reflect.Type
type BreakValue ¶ added in v0.0.6
type BreakValue struct{}
BreakValue is an implementation detail used to handle break statements
func (*BreakValue) Inspect ¶ added in v0.0.6
func (rv *BreakValue) Inspect() string
func (*BreakValue) InvokeMethod ¶ added in v0.0.6
func (rv *BreakValue) InvokeMethod(method string, args ...Object) Object
func (*BreakValue) ToInterface ¶ added in v0.0.6
func (rv *BreakValue) ToInterface() interface{}
func (*BreakValue) Type ¶ added in v0.0.6
func (rv *BreakValue) Type() Type
type Builtin ¶
type Builtin struct {
// The function that this object wraps.
Fn BuiltinFunction
// The name of the function.
Name string
// The module the function originates from (optional)
Module *Module
// The name of the module this function origiantes from.
// This is only used for overriding builtins.
ModuleName string
}
Builtin wraps func and implements Object interface.
func NewNoopBuiltin ¶ added in v0.0.6
NewNoopBuiltin creates a builtin function that has no effect.
func (*Builtin) InvokeMethod ¶
InvokeMethod invokes a method against the object. (Built-in methods only.)
func (*Builtin) Key ¶ added in v0.0.6
Returns a string that uniquely identifies this builtin function.
func (*Builtin) ToInterface ¶
func (b *Builtin) ToInterface() interface{}
ToInterface converts this object to a go-interface, which will allow it to be used naturally in our sprintf/printf primitives.
It might also be helpful for embedded users.
type BuiltinFunction ¶
BuiltinFunction holds the type of a built-in function.
type Comparable ¶ added in v0.0.9
Comparable is an interface used to compare two objects.
-1 if this < other 0 if this == other 1 if this > other
type DatabaseConnection ¶
type DatabaseConnection struct {
Conn interface{}
}
func (*DatabaseConnection) Inspect ¶
func (c *DatabaseConnection) Inspect() string
func (*DatabaseConnection) InvokeMethod ¶
func (c *DatabaseConnection) InvokeMethod(method string, args ...Object) Object
func (*DatabaseConnection) ToInterface ¶
func (c *DatabaseConnection) ToInterface() interface{}
func (*DatabaseConnection) Type ¶
func (c *DatabaseConnection) Type() Type
type DefaultProxyManager ¶ added in v0.0.9
type DefaultProxyManager struct {
// contains filtered or unexported fields
}
DefaultProxyManager implements the ProxyManager interface.
func NewProxyManager ¶ added in v0.0.9
func NewProxyManager(opts ProxyManagerOpts) (*DefaultProxyManager, error)
NewProxyManager creates a ProxyManager that can be used to proxy method calls to various struct types. The provided type conversion functions are used to translate between Go and Tamarin types.
func (*DefaultProxyManager) Call ¶ added in v0.0.9
func (p *DefaultProxyManager) Call(obj interface{}, method string, args ...Object) Object
func (*DefaultProxyManager) GetType ¶ added in v0.0.9
func (p *DefaultProxyManager) GetType(obj interface{}) (*ProxyType, bool)
func (*DefaultProxyManager) HasType ¶ added in v0.0.9
func (p *DefaultProxyManager) HasType(obj interface{}) bool
func (*DefaultProxyManager) RegisterType ¶ added in v0.0.9
func (p *DefaultProxyManager) RegisterType(obj interface{}) (*ProxyType, error)
type Error ¶
type Error struct {
// Message contains the error-message we're wrapping
Message string
}
Error wraps string and implements Object interface.
func (*Error) InvokeMethod ¶
InvokeMethod invokes a method against the object. (Built-in methods only.)
func (*Error) ToInterface ¶
func (e *Error) ToInterface() interface{}
ToInterface converts this object to a go-interface, which will allow it to be used naturally in our sprintf/printf primitives.
It might also be helpful for embedded users.
type ErrorConverter ¶ added in v0.0.9
type ErrorConverter struct{}
func (*ErrorConverter) From ¶ added in v0.0.9
func (c *ErrorConverter) From(obj interface{}) (Object, error)
func (*ErrorConverter) To ¶ added in v0.0.9
func (c *ErrorConverter) To(obj Object) (interface{}, error)
func (*ErrorConverter) Type ¶ added in v0.0.9
func (c *ErrorConverter) Type() reflect.Type
type Float ¶
type Float struct {
// Value holds the float64 wrapped by this object.
Value float64
}
Float wraps float64 and implements Object and Hashable interfaces.
func (*Float) ToInterface ¶
func (f *Float) ToInterface() interface{}
type Float32Converter ¶ added in v0.0.9
type Float32Converter struct{}
Float32Converter converts between float32 and Float.
func (*Float32Converter) From ¶ added in v0.0.9
func (c *Float32Converter) From(obj interface{}) (Object, error)
func (*Float32Converter) To ¶ added in v0.0.9
func (c *Float32Converter) To(obj Object) (interface{}, error)
func (*Float32Converter) Type ¶ added in v0.0.9
func (c *Float32Converter) Type() reflect.Type
type Float64Converter ¶ added in v0.0.9
type Float64Converter struct{}
Float64Converter converts between float64 and Float.
func (*Float64Converter) From ¶ added in v0.0.9
func (c *Float64Converter) From(obj interface{}) (Object, error)
func (*Float64Converter) To ¶ added in v0.0.9
func (c *Float64Converter) To(obj Object) (interface{}, error)
func (*Float64Converter) Type ¶ added in v0.0.9
func (c *Float64Converter) Type() reflect.Type
type Function ¶
type Function struct {
Parameters []*ast.Identifier
Body *ast.BlockStatement
Defaults map[string]ast.Expression
Scope interface{} // avoids circular package dependency; is a scope.Scope
}
Function wraps ast.Identifier array and ast.BlockStatement and implements Object interface.
func (*Function) InvokeMethod ¶
InvokeMethod invokes a method against the object. (Built-in methods only.)
func (*Function) ToInterface ¶
func (f *Function) ToInterface() interface{}
ToInterface converts this object to a go-interface, which will allow it to be used naturally in our sprintf/printf primitives.
It might also be helpful for embedded users.
type Hash ¶
func (*Hash) GetWithObject ¶
func (*Hash) ToInterface ¶
func (h *Hash) ToInterface() interface{}
type Hashable ¶
type Hashable interface {
// HashKey returns a hash key for the given object.
HashKey() Key
}
Hashable types can be hashed and consequently used in a set.
type HttpResponse ¶
func (*HttpResponse) Inspect ¶
func (r *HttpResponse) Inspect() string
func (*HttpResponse) InvokeMethod ¶
func (r *HttpResponse) InvokeMethod(method string, args ...Object) Object
func (*HttpResponse) JSON ¶
func (r *HttpResponse) JSON() (target interface{}, err error)
func (*HttpResponse) Text ¶
func (r *HttpResponse) Text() (string, error)
func (*HttpResponse) ToInterface ¶
func (r *HttpResponse) ToInterface() interface{}
func (*HttpResponse) Type ¶
func (r *HttpResponse) Type() Type
type Int64Converter ¶ added in v0.0.9
type Int64Converter struct{}
Int64Converter converts between int64 and Integer.
func (*Int64Converter) From ¶ added in v0.0.9
func (c *Int64Converter) From(obj interface{}) (Object, error)
func (*Int64Converter) To ¶ added in v0.0.9
func (c *Int64Converter) To(obj Object) (interface{}, error)
func (*Int64Converter) Type ¶ added in v0.0.9
func (c *Int64Converter) Type() reflect.Type
type IntConverter ¶ added in v0.0.9
type IntConverter struct{}
IntConverter converts between int and Integer.
func (*IntConverter) From ¶ added in v0.0.9
func (c *IntConverter) From(obj interface{}) (Object, error)
func (*IntConverter) To ¶ added in v0.0.9
func (c *IntConverter) To(obj Object) (interface{}, error)
func (*IntConverter) Type ¶ added in v0.0.9
func (c *IntConverter) Type() reflect.Type
type Integer ¶
type Integer struct {
// Value holds the int64 wrapped by this object.
Value int64
}
Integer wraps int64 and implements Object and Hashable interfaces.
func NewInteger ¶ added in v0.0.4
func (*Integer) ToInterface ¶
func (i *Integer) ToInterface() interface{}
type Key ¶ added in v0.0.9
type Key struct {
// Type of the object being referenced.
Type Type
// FltValue is used as the key for floats.
FltValue float64
// IntValue is used as the key for integers.
IntValue int64
// StrValue is used as the key for strings.
StrValue string
}
Key is used to identify unique values in a set.
type MapStringIfaceConverter ¶ added in v0.0.9
type MapStringIfaceConverter struct{}
MapStringIfaceConverter converts between map[string]interface{} and Hash.
func (*MapStringIfaceConverter) From ¶ added in v0.0.9
func (c *MapStringIfaceConverter) From(obj interface{}) (Object, error)
func (*MapStringIfaceConverter) To ¶ added in v0.0.9
func (c *MapStringIfaceConverter) To(obj Object) (interface{}, error)
func (*MapStringIfaceConverter) Type ¶ added in v0.0.9
func (c *MapStringIfaceConverter) Type() reflect.Type
type Module ¶
type Module struct {
Name string
Scope interface{}
}
func (*Module) ToInterface ¶
func (m *Module) ToInterface() interface{}
type Null ¶
type Null struct{}
Null wraps nothing and implements our Object interface.
func (*Null) ToInterface ¶
func (n *Null) ToInterface() interface{}
type Object ¶
type Object interface {
// Type of this object.
Type() Type
// Inspect returns a string-representation of the given object.
Inspect() string
// InvokeMethod invokes a method against the object.
// (Built-in methods only.)
InvokeMethod(method string, args ...Object) Object
// ToInterface converts the given object to a "native" golang value,
// which is required to ensure that we can use the object in our
// `sprintf` or `printf` primitives.
ToInterface() interface{}
}
Object is the interface that all object types in Tamarin must implement.
func FromGoType ¶
func FromGoType(obj interface{}) Object
type Proxy ¶ added in v0.0.9
type Proxy struct {
// contains filtered or unexported fields
}
Proxy is a Tamarin type that proxies method calls to a wrapped Go struct. Only the public methods of the Go type are proxied.
func NewProxy ¶ added in v0.0.9
func NewProxy(mgr ProxyManager, obj interface{}) *Proxy
NewProxy returns a new Tamarin proxy object that wraps the given Go object. The Go type should previously been registered with the ProxyManager.
func (*Proxy) InvokeMethod ¶ added in v0.0.9
func (*Proxy) ToInterface ¶ added in v0.0.9
func (p *Proxy) ToInterface() interface{}
type ProxyManager ¶ added in v0.0.9
type ProxyManager interface {
// RegisterType determines type and method information for the provided
// object and saves that information for use in later method call proxying.
RegisterType(obj interface{}) (*ProxyType, error)
// HasType returns true if the type of the objects has been registered.
HasType(obj interface{}) bool
// Call the named method on the object with the given arguments.
// The type of the object must have been previously registered, otherwise
// a Tamarin error object is returned.
Call(obj interface{}, method string, args ...Object) Object
}
ProxyManager is an interface that defines a way to register Go types and call methods on instances of those types.
type ProxyManagerOpts ¶ added in v0.0.9
type ProxyManagerOpts struct {
Types []any
Converters []TypeConverter
NoDefaults bool
}
type ProxyMethod ¶ added in v0.0.9
type ProxyMethod struct {
Name string
Method reflect.Method
NumIn int
NumOut int
InputConverters []TypeConverter
OutputConverters []TypeConverter
OutputHasErr bool
}
ProxyMethod represents a single method on a Go type that can be proxied.
type ProxyType ¶ added in v0.0.9
type ProxyType struct {
NumMethod int
Methods []*ProxyMethod
Value interface{}
Type reflect.Type
}
ProxyType represents a single Go type whose methods can be proxied.
type Regexp ¶
type Regexp struct {
// Value holds the string value this object wraps.
Value string
// Flags holds the flags for the object
Flags string
}
Regexp wraps regular-expressions and implements the Object interface.
func (*Regexp) ToInterface ¶
func (r *Regexp) ToInterface() interface{}
type Result ¶
Result contains one of: an "ok" value and an "err" value
func NewErrorResult ¶
func NewOkResult ¶ added in v0.0.4
func (*Result) ToInterface ¶
func (rv *Result) ToInterface() interface{}
type ReturnValue ¶
type ReturnValue struct {
// Value is the object that is to be returned
Value Object
}
ReturnValue wraps Object and implements Object interface.
func (*ReturnValue) Inspect ¶
func (rv *ReturnValue) Inspect() string
Inspect returns a string-representation of the given object.
func (*ReturnValue) InvokeMethod ¶
func (rv *ReturnValue) InvokeMethod(method string, args ...Object) Object
InvokeMethod invokes a method against the object. (Built-in methods only.)
func (*ReturnValue) ToInterface ¶
func (rv *ReturnValue) ToInterface() interface{}
ToInterface converts this object to a go-interface, which will allow it to be used naturally in our sprintf/printf primitives.
It might also be helpful for embedded users.
type Set ¶
func NewSetWithSize ¶ added in v0.0.9
func (*Set) Difference ¶ added in v0.0.9
Difference returns a new set that is the difference of the two sets.
func (*Set) Intersection ¶ added in v0.0.9
Intersection returns a new set that is the intersection of the two sets.
func (*Set) ToInterface ¶
func (s *Set) ToInterface() interface{}
type String ¶
type String struct {
// Value holds the string wrapped by this object.
Value string
}
String wraps string and implements Object and Hashable interfaces.
func (*String) ToInterface ¶
func (s *String) ToInterface() interface{}
type StringConverter ¶ added in v0.0.9
type StringConverter struct{}
StringConverter converts between string and String.
func (*StringConverter) From ¶ added in v0.0.9
func (c *StringConverter) From(obj interface{}) (Object, error)
func (*StringConverter) To ¶ added in v0.0.9
func (c *StringConverter) To(obj Object) (interface{}, error)
func (*StringConverter) Type ¶ added in v0.0.9
func (c *StringConverter) Type() reflect.Type
type StructConverter ¶ added in v0.0.9
type StructConverter struct {
Prototype interface{}
}
StructConverter converts between a struct and a Hash via JSON marshaling.
func (*StructConverter) From ¶ added in v0.0.9
func (c *StructConverter) From(obj interface{}) (Object, error)
func (*StructConverter) To ¶ added in v0.0.9
func (c *StructConverter) To(obj Object) (interface{}, error)
func (*StructConverter) Type ¶ added in v0.0.9
func (c *StructConverter) Type() reflect.Type
type Time ¶ added in v0.0.4
func (*Time) InvokeMethod ¶ added in v0.0.4
func (*Time) ToInterface ¶ added in v0.0.4
func (t *Time) ToInterface() interface{}
type TimeConverter ¶ added in v0.0.9
type TimeConverter struct{}
TimeConverter converts between time.Time and Time.
func (*TimeConverter) From ¶ added in v0.0.9
func (c *TimeConverter) From(obj interface{}) (Object, error)
func (*TimeConverter) To ¶ added in v0.0.9
func (c *TimeConverter) To(obj Object) (interface{}, error)
func (*TimeConverter) Type ¶ added in v0.0.9
func (c *TimeConverter) Type() reflect.Type
type TypeConverter ¶ added in v0.0.9
type TypeConverter interface {
// To converts a Tamarin object to a Go object.
To(Object) (interface{}, error)
// From converts a Go object to a Tamarin object.
From(interface{}) (Object, error)
// Type that this TypeConverter is responsbile for.
Type() reflect.Type
}
TypeConverter is an interface used to convert between Go and Tamarin objects for a single Go type. There may be a way to use generics here...