mirror of
https://github.com/MontFerret/ferret.git
synced 2024-12-16 11:37:36 +02:00
f91fbf6f8c
* rename method Clone to Copy * added Cloneable interface * added Value to Cloneable interface * implemented Cloneable intefrace by array * implemented Cloneable interface by Object * unit tests for Object.Clone * move core.IsCloneable to value.go * change Clone function * move IsClonable to package values
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
package core
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
//revive:disable-next-line redefines-builtin-id
|
|
type Type int64
|
|
|
|
const (
|
|
NoneType Type = 0
|
|
BooleanType Type = 1
|
|
IntType Type = 2
|
|
FloatType Type = 3
|
|
StringType Type = 4
|
|
DateTimeType Type = 5
|
|
ArrayType Type = 6
|
|
ObjectType Type = 7
|
|
HTMLElementType Type = 8
|
|
HTMLDocumentType Type = 9
|
|
BinaryType Type = 10
|
|
)
|
|
|
|
var typestr = map[Type]string{
|
|
NoneType: "none",
|
|
BooleanType: "boolean",
|
|
IntType: "int",
|
|
FloatType: "float",
|
|
StringType: "string",
|
|
DateTimeType: "datetime",
|
|
ArrayType: "array",
|
|
ObjectType: "object",
|
|
HTMLElementType: "HTMLElement",
|
|
HTMLDocumentType: "HTMLDocument",
|
|
BinaryType: "BinaryType",
|
|
}
|
|
|
|
func (t Type) String() string {
|
|
return typestr[t]
|
|
}
|
|
|
|
type Value interface {
|
|
json.Marshaler
|
|
Type() Type
|
|
String() string
|
|
Compare(other Value) int
|
|
Unwrap() interface{}
|
|
Hash() uint64
|
|
Copy() Value
|
|
}
|
|
|
|
func IsTypeOf(value Value, check Type) bool {
|
|
return value.Type() == check
|
|
}
|
|
|
|
func ValidateType(value Value, required ...Type) error {
|
|
var valid bool
|
|
ct := value.Type()
|
|
|
|
for _, t := range required {
|
|
if ct == t {
|
|
valid = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if !valid {
|
|
return TypeError(value.Type(), required...)
|
|
}
|
|
|
|
return nil
|
|
}
|