From bbba288c29f2def763f0f5941b8f246db6c3f062 Mon Sep 17 00:00:00 2001 From: Dmitry B Date: Wed, 21 Dec 2022 10:49:10 +0400 Subject: [PATCH 1/3] +lua.Any type --- fixtures/any.lua | 5 +++++ module_test.go | 20 ++++++++++++++++++++ value.go | 8 ++++++++ 3 files changed, 33 insertions(+) create mode 100644 fixtures/any.lua diff --git a/fixtures/any.lua b/fixtures/any.lua new file mode 100644 index 0000000..61e1f5c --- /dev/null +++ b/fixtures/any.lua @@ -0,0 +1,5 @@ +local api = require("test") + +function main(input) + return api.any(input) +end \ No newline at end of file diff --git a/module_test.go b/module_test.go index 3cfd886..286d9b3 100644 --- a/module_test.go +++ b/module_test.go @@ -30,9 +30,19 @@ func testModule() Module { must(m.Register("enrich", enrich)) must(m.Register("error", errorfunc)) must(m.Register("error1", errorfunc1)) + must(m.Register("any", any1)) return m } +func any1(v Any) (Numbers, error) { + switch t := v.(type) { + case Numbers: + return t, nil + default: + return nil, fmt.Errorf("unsupported type %T", v) + } +} + func sum(a, b Number) (Number, error) { return a + b, nil } @@ -99,6 +109,16 @@ func Test_Hash(t *testing.T) { assert.Equal(t, int64(4282878506), int64(out.(Number))) } +func Test_Any(t *testing.T) { + s, err := newScript("fixtures/any.lua") + assert.NoError(t, err) + + out, err := s.Run(context.Background(), []float64{1.1, 2.1}) + assert.NoError(t, err) + assert.Equal(t, TypeNumbers, out.Type()) + assert.Equal(t, []float64{1.1, 2.1}, out.Native()) +} + func Test_Sum(t *testing.T) { s, err := newScript("fixtures/sum.lua") assert.NoError(t, err) diff --git a/value.go b/value.go index 9de1fc9..7428956 100644 --- a/value.go +++ b/value.go @@ -25,6 +25,7 @@ var ( typeBools = reflect.TypeOf(Bools(nil)) typeTable = reflect.TypeOf(Table(nil)) typeArray = reflect.TypeOf(Array(nil)) + typeAny = reflect.TypeOf((*Any)(nil)).Elem() ) var typeMap = map[reflect.Type]Type{ @@ -36,6 +37,7 @@ var typeMap = map[reflect.Type]Type{ typeBools: TypeBools, typeTable: TypeTable, typeArray: TypeArray, + typeAny: TypeAny, } // Type represents a type of the value @@ -52,6 +54,7 @@ const ( TypeStrings TypeTable TypeArray + TypeAny ) // Value represents a returned @@ -343,3 +346,8 @@ func (v Array) lvalue(state *lua.LState) lua.LValue { } return tbl } + +// -------------------------------------------------------------------- + +// Any represents any type (interface{}) +type Any any From d079819dc4371dc0422b054428dac256b0e2a8ff Mon Sep 17 00:00:00 2001 From: Dmitry B Date: Wed, 21 Dec 2022 11:02:48 +0400 Subject: [PATCH 2/3] rm lua method --- fixtures/any.lua | 3 ++- module_test.go | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fixtures/any.lua b/fixtures/any.lua index 61e1f5c..9cb7c2d 100644 --- a/fixtures/any.lua +++ b/fixtures/any.lua @@ -1,5 +1,6 @@ local api = require("test") function main(input) - return api.any(input) + -- input is type of Any + return api.toNumbers(input) end \ No newline at end of file diff --git a/module_test.go b/module_test.go index 286d9b3..0e79b91 100644 --- a/module_test.go +++ b/module_test.go @@ -30,11 +30,11 @@ func testModule() Module { must(m.Register("enrich", enrich)) must(m.Register("error", errorfunc)) must(m.Register("error1", errorfunc1)) - must(m.Register("any", any1)) + must(m.Register("toNumbers", toNumbers)) return m } -func any1(v Any) (Numbers, error) { +func toNumbers(v Any) (Numbers, error) { switch t := v.(type) { case Numbers: return t, nil From 567aeda5dc4731875aa8d8d8e435375a9f2fec07 Mon Sep 17 00:00:00 2001 From: Dmitry B Date: Wed, 21 Dec 2022 16:59:57 +0400 Subject: [PATCH 3/3] improve --- fixtures/{any.lua => value.lua} | 2 +- module_test.go | 6 +++--- value.go | 11 +++-------- 3 files changed, 7 insertions(+), 12 deletions(-) rename fixtures/{any.lua => value.lua} (70%) diff --git a/fixtures/any.lua b/fixtures/value.lua similarity index 70% rename from fixtures/any.lua rename to fixtures/value.lua index 9cb7c2d..cb9e7e8 100644 --- a/fixtures/any.lua +++ b/fixtures/value.lua @@ -1,6 +1,6 @@ local api = require("test") function main(input) - -- input is type of Any + -- toNumbers accepts Value type return api.toNumbers(input) end \ No newline at end of file diff --git a/module_test.go b/module_test.go index 0e79b91..c708c52 100644 --- a/module_test.go +++ b/module_test.go @@ -34,7 +34,7 @@ func testModule() Module { return m } -func toNumbers(v Any) (Numbers, error) { +func toNumbers(v Value) (Numbers, error) { switch t := v.(type) { case Numbers: return t, nil @@ -109,8 +109,8 @@ func Test_Hash(t *testing.T) { assert.Equal(t, int64(4282878506), int64(out.(Number))) } -func Test_Any(t *testing.T) { - s, err := newScript("fixtures/any.lua") +func Test_Value(t *testing.T) { + s, err := newScript("fixtures/value.lua") assert.NoError(t, err) out, err := s.Run(context.Background(), []float64{1.1, 2.1}) diff --git a/value.go b/value.go index 7428956..41fad97 100644 --- a/value.go +++ b/value.go @@ -25,7 +25,7 @@ var ( typeBools = reflect.TypeOf(Bools(nil)) typeTable = reflect.TypeOf(Table(nil)) typeArray = reflect.TypeOf(Array(nil)) - typeAny = reflect.TypeOf((*Any)(nil)).Elem() + typeValue = reflect.TypeOf((*Value)(nil)).Elem() ) var typeMap = map[reflect.Type]Type{ @@ -37,7 +37,7 @@ var typeMap = map[reflect.Type]Type{ typeBools: TypeBools, typeTable: TypeTable, typeArray: TypeArray, - typeAny: TypeAny, + typeValue: TypeValue, } // Type represents a type of the value @@ -54,7 +54,7 @@ const ( TypeStrings TypeTable TypeArray - TypeAny + TypeValue ) // Value represents a returned @@ -346,8 +346,3 @@ func (v Array) lvalue(state *lua.LState) lua.LValue { } return tbl } - -// -------------------------------------------------------------------- - -// Any represents any type (interface{}) -type Any any