diff --git a/forge/rep/json.go b/forge/rep/json.go index 20e6285..0a5ce15 100644 --- a/forge/rep/json.go +++ b/forge/rep/json.go @@ -28,7 +28,7 @@ func prepare(raw interface{}) coderep { case map[string]interface{}: return makeModule(ri) default: - return makeRecord(&ri) + return makeRecord(ri) } return nil } diff --git a/forge/rep/rep.go b/forge/rep/rep.go index 0160091..58c4af6 100644 --- a/forge/rep/rep.go +++ b/forge/rep/rep.go @@ -49,6 +49,10 @@ func (ci code) Compile(f forge.FE) forge.FPtr { c.Append(i.Compile(f)) case map[string]interface{}: c.Append(makeModule(i).Compile(f)) + case record: + c.Append(i.Compile(f)) + default: + c.Append(makeRecord(i).Compile(f)) } } return c.Reset() @@ -91,14 +95,20 @@ func makeModule(ri map[string]interface{}) module { // record - some data structure, typically represented as struct -type Record struct { - Data interface{} +type Record = record + +type record struct { + data interface{} } -func (r *Record) Compile(f forge.FE) forge.FPtr { +func (r *record) Compile(f forge.FE) forge.FPtr { return nil } -func makeRecord(ri interface{}) *Record { - return &Record{ri} +func (r *record) Data() interface{} { + return r.data +} + +func makeRecord(ri interface{}) *record { + return &record{ri} } diff --git a/tests/forge_test.go b/tests/forge_test.go index b210b39..924ef22 100644 --- a/tests/forge_test.go +++ b/tests/forge_test.go @@ -17,10 +17,6 @@ type Person struct { LastName string `json:"lastname"` } -func (p Person) Compile(f forge.FE) forge.FPtr { - return f.Code(p) -} - func TestForge(tb *tbase.T) { t := testing.SetUp(tb) t.Run("exec", ExecTest) @@ -67,7 +63,6 @@ func JsonTest(t *testing.T) { t.AssertEqual(fe.Pop(), 6) j = `{"firstname": "John", "lastname": "Dow"}` prep := rep.ParseJsonTo[Person](j) - data := prep.(*rep.Record).Data.(*interface{}) - person := (*data).(Person) + person := prep.(*rep.Record).Data().(Person) t.AssertEqual(person.FirstName, "John") }