init generate
This commit is contained in:
49
definition/generate/render/render.go
Normal file
49
definition/generate/render/render.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package render
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"reflect"
|
||||
|
||||
"gitoa.ru/go-4devs/config/definition"
|
||||
"gitoa.ru/go-4devs/config/definition/generate/view"
|
||||
"gitoa.ru/go-4devs/config/definition/group"
|
||||
"gitoa.ru/go-4devs/config/definition/option"
|
||||
"gitoa.ru/go-4devs/config/definition/proto"
|
||||
)
|
||||
|
||||
type Execute func(w io.Writer, vi view.View, rnd Rendering) error
|
||||
|
||||
var randders = map[reflect.Type]Execute{
|
||||
reflect.TypeFor[*definition.Definition](): Template(defTpl),
|
||||
reflect.TypeFor[group.Group](): Template(groupTpl),
|
||||
reflect.TypeFor[option.Option](): Template(optTpl),
|
||||
reflect.TypeFor[proto.Proto](): Template(protoTpl),
|
||||
}
|
||||
|
||||
func Renders() map[reflect.Type]Execute {
|
||||
return randders
|
||||
}
|
||||
|
||||
func Add(rt reflect.Type, fn Execute) {
|
||||
randders[rt] = fn
|
||||
}
|
||||
|
||||
func Render(w io.Writer, view view.View, data Rendering) error {
|
||||
rnd, ok := randders[view.Kind()]
|
||||
if !ok {
|
||||
return fmt.Errorf("%w:%v", ErrNotFound, view.Kind())
|
||||
}
|
||||
|
||||
if err := rnd(w, view, data); err != nil {
|
||||
return fmt.Errorf("render:%v, err:%w", view.Kind(), err)
|
||||
}
|
||||
|
||||
for _, ch := range view.Views() {
|
||||
if err := Render(w, ch, data); err != nil {
|
||||
return fmt.Errorf("render[%v]:%w", ch.Name(), err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user