1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-11-06 08:39:09 +02:00

Move value specific Iterable and Iterator interfaces into core module (#233)

* Move value specific Iterable and Iterator interfaces into core module

* Update Makefile

Reverted test command

* Update collection.go

* Fixed wrong iterator usage

* Updated use of switch statements
This commit is contained in:
Tim Voronov
2019-02-15 07:41:08 -05:00
committed by GitHub
parent 1af8b37a0f
commit f8e061cc80
13 changed files with 82 additions and 93 deletions

View File

@@ -206,44 +206,42 @@ func SetIn(ctx context.Context, to core.Value, byPath []core.Value, value core.V
}
func Parse(input interface{}) core.Value {
switch input.(type) {
switch value := input.(type) {
case bool:
return NewBoolean(input.(bool))
return NewBoolean(value)
case string:
return NewString(input.(string))
return NewString(value)
case int:
return NewInt(input.(int))
return NewInt(value)
case float64:
return NewFloat(input.(float64))
return NewFloat(value)
case float32:
return NewFloat(float64(input.(float32)))
return NewFloat(float64(value))
case time.Time:
return NewDateTime(input.(time.Time))
return NewDateTime(value)
case []interface{}:
input := input.([]interface{})
arr := NewArray(len(input))
arr := NewArray(len(value))
for _, el := range input {
for _, el := range value {
arr.Push(Parse(el))
}
return arr
case map[string]interface{}:
input := input.(map[string]interface{})
obj := NewObject()
for key, el := range input {
for key, el := range value {
obj.Set(NewString(key), Parse(el))
}
return obj
case []byte:
return NewBinary(input.([]byte))
return NewBinary(value)
case nil:
return None
default:
v := reflect.ValueOf(input)
t := reflect.TypeOf(input)
v := reflect.ValueOf(value)
t := reflect.TypeOf(value)
kind := t.Kind()
if kind == reflect.Slice || kind == reflect.Array {
@@ -251,8 +249,8 @@ func Parse(input interface{}) core.Value {
arr := NewArray(size)
for i := 0; i < size; i++ {
value := v.Index(i)
arr.Push(Parse(value.Interface()))
curVal := v.Index(i)
arr.Push(Parse(curVal.Interface()))
}
return arr
@@ -264,9 +262,9 @@ func Parse(input interface{}) core.Value {
for _, k := range keys {
key := Parse(k.Interface())
value := v.MapIndex(k)
curVal := v.MapIndex(k)
obj.Set(NewString(key.String()), Parse(value.Interface()))
obj.Set(NewString(key.String()), Parse(curVal.Interface()))
}
return obj
@@ -278,9 +276,9 @@ func Parse(input interface{}) core.Value {
for i := 0; i < size; i++ {
field := t.Field(i)
value := v.Field(i)
fieldValue := v.Field(i)
obj.Set(NewString(field.Name), Parse(value.Interface()))
obj.Set(NewString(field.Name), Parse(fieldValue.Interface()))
}
return obj