forge/rep: record type improvements

This commit is contained in:
Helmut Merz 2023-09-10 09:47:52 +02:00
parent 4e58729985
commit 5626840630
3 changed files with 17 additions and 12 deletions

View file

@ -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
}

View file

@ -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}
}

View file

@ -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")
}