forge/rep: record type improvements
This commit is contained in:
parent
4e58729985
commit
5626840630
3 changed files with 17 additions and 12 deletions
|
@ -28,7 +28,7 @@ func prepare(raw interface{}) coderep {
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
return makeModule(ri)
|
return makeModule(ri)
|
||||||
default:
|
default:
|
||||||
return makeRecord(&ri)
|
return makeRecord(ri)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,10 @@ func (ci code) Compile(f forge.FE) forge.FPtr {
|
||||||
c.Append(i.Compile(f))
|
c.Append(i.Compile(f))
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
c.Append(makeModule(i).Compile(f))
|
c.Append(makeModule(i).Compile(f))
|
||||||
|
case record:
|
||||||
|
c.Append(i.Compile(f))
|
||||||
|
default:
|
||||||
|
c.Append(makeRecord(i).Compile(f))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return c.Reset()
|
return c.Reset()
|
||||||
|
@ -91,14 +95,20 @@ func makeModule(ri map[string]interface{}) module {
|
||||||
|
|
||||||
// record - some data structure, typically represented as struct
|
// record - some data structure, typically represented as struct
|
||||||
|
|
||||||
type Record struct {
|
type Record = record
|
||||||
Data interface{}
|
|
||||||
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeRecord(ri interface{}) *Record {
|
func (r *record) Data() interface{} {
|
||||||
return &Record{ri}
|
return r.data
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeRecord(ri interface{}) *record {
|
||||||
|
return &record{ri}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,6 @@ type Person struct {
|
||||||
LastName string `json:"lastname"`
|
LastName string `json:"lastname"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Person) Compile(f forge.FE) forge.FPtr {
|
|
||||||
return f.Code(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestForge(tb *tbase.T) {
|
func TestForge(tb *tbase.T) {
|
||||||
t := testing.SetUp(tb)
|
t := testing.SetUp(tb)
|
||||||
t.Run("exec", ExecTest)
|
t.Run("exec", ExecTest)
|
||||||
|
@ -67,7 +63,6 @@ func JsonTest(t *testing.T) {
|
||||||
t.AssertEqual(fe.Pop(), 6)
|
t.AssertEqual(fe.Pop(), 6)
|
||||||
j = `{"firstname": "John", "lastname": "Dow"}`
|
j = `{"firstname": "John", "lastname": "Dow"}`
|
||||||
prep := rep.ParseJsonTo[Person](j)
|
prep := rep.ParseJsonTo[Person](j)
|
||||||
data := prep.(*rep.Record).Data.(*interface{})
|
person := prep.(*rep.Record).Data().(Person)
|
||||||
person := (*data).(Person)
|
|
||||||
t.AssertEqual(person.FirstName, "John")
|
t.AssertEqual(person.FirstName, "John")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue