mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-12 18:11:34 +08:00
138 lines
2.3 KiB
Go
138 lines
2.3 KiB
Go
package driver
|
|
|
|
import "encoding/json"
|
|
|
|
type IDriver interface {
|
|
ID() string
|
|
Name() string
|
|
Title() string
|
|
Group() string
|
|
Front() string
|
|
Define() IDefine
|
|
}
|
|
|
|
type IDefine interface {
|
|
Profession() string
|
|
Skill() string
|
|
Drivers() []*Field
|
|
Fields(fields ...*Field) []*Field
|
|
Render() map[string]interface{}
|
|
Columns() []string
|
|
}
|
|
|
|
type Driver struct {
|
|
id string
|
|
name string
|
|
title string
|
|
group string
|
|
front string
|
|
define IDefine
|
|
}
|
|
|
|
func (d *Driver) ID() string {
|
|
return d.id
|
|
}
|
|
|
|
func (d *Driver) Name() string {
|
|
return d.name
|
|
}
|
|
|
|
func (d *Driver) Title() string {
|
|
return d.title
|
|
}
|
|
|
|
func (d *Driver) Group() string {
|
|
return d.group
|
|
}
|
|
|
|
func (d *Driver) Front() string {
|
|
return d.front
|
|
}
|
|
|
|
func (d *Driver) Define() IDefine {
|
|
return d.define
|
|
}
|
|
|
|
func NewDriver(cfg *PluginCfg) IDriver {
|
|
return &Driver{
|
|
id: cfg.Id,
|
|
name: cfg.Name,
|
|
title: cfg.Cname,
|
|
group: cfg.GroupId,
|
|
front: cfg.Front,
|
|
define: NewDefine(cfg.Define),
|
|
}
|
|
}
|
|
|
|
var defaultFields = []*Field{
|
|
{
|
|
Name: "updater",
|
|
Title: "更新者",
|
|
},
|
|
{
|
|
Name: "update_time",
|
|
Title: "更新时间",
|
|
},
|
|
}
|
|
|
|
type Define struct {
|
|
profession string
|
|
skill string
|
|
drivers []*Field
|
|
fields []*Field
|
|
columns []string
|
|
render map[string]interface{}
|
|
}
|
|
|
|
func (d *Define) Columns() []string {
|
|
return d.columns
|
|
}
|
|
|
|
func NewDefine(d *PluginDefine) *Define {
|
|
columns := make([]string, 0, len(d.Fields))
|
|
for _, field := range d.Fields {
|
|
columns = append(columns, field.Name)
|
|
}
|
|
render := make(map[string]interface{})
|
|
for k, v := range d.Render {
|
|
r := make(map[string]interface{})
|
|
err := json.Unmarshal([]byte(v), &r)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
render[k] = r
|
|
}
|
|
return &Define{
|
|
profession: d.Profession,
|
|
skill: d.Skill,
|
|
drivers: d.Drivers,
|
|
fields: d.Fields,
|
|
render: render,
|
|
columns: columns,
|
|
}
|
|
}
|
|
|
|
func (d *Define) Profession() string {
|
|
return d.profession
|
|
}
|
|
|
|
func (d *Define) Skill() string {
|
|
return d.skill
|
|
}
|
|
|
|
func (d *Define) Drivers() []*Field {
|
|
return d.drivers
|
|
}
|
|
|
|
func (d *Define) Fields(fields ...*Field) []*Field {
|
|
fs := make([]*Field, 0, len(d.fields)+len(fields)+len(defaultFields))
|
|
fs = append(fs, d.fields...)
|
|
fs = append(fs, fields...)
|
|
fs = append(fs, defaultFields...)
|
|
return fs
|
|
}
|
|
|
|
func (d *Define) Render() map[string]interface{} {
|
|
return d.render
|
|
}
|