11package entities
22
33import (
4+ "database/sql/driver"
45 "encoding/json"
56 "errors"
67 "fmt"
@@ -44,11 +45,11 @@ func (m *Plugin) Validate() error {
4445 }
4546
4647 // validate plugin configuration
47- p , err := m .Plugin ()
48+ p , err := m .ToPlugin ()
4849 if err != nil {
4950 return err
5051 }
51- if err = p .ValidateConfig (); err != nil {
52+ if err = p .ValidateConfig (m . Config ); err != nil {
5253 if e , ok := err .(* errs.ValidateError ); ok {
5354 e .Fields = map [string ]interface {}{
5455 "config" : e .Fields ,
@@ -57,6 +58,13 @@ func (m *Plugin) Validate() error {
5758 }
5859 return err
5960 }
61+
62+ err = p .Init (m .Config )
63+ if err != nil {
64+ return err
65+ }
66+ m .Config = p .GetConfig ()
67+
6068 return nil
6169}
6270
@@ -69,44 +77,40 @@ func (m *Plugin) UnmarshalJSON(data []byte) error {
6977 return json .Unmarshal (data , (* alias )(m ))
7078}
7179
72- func (m * Plugin ) Plugin () (plugin.Plugin , error ) {
73- r := plugin .GetRegistration (m .Name )
74- if r == nil {
80+ func (m * Plugin ) ToPlugin () (plugin.Plugin , error ) {
81+ executor , ok := plugin .New (m .Name )
82+ if ! ok {
7583 return nil , fmt .Errorf ("unknown plugin name: '%s'" , m .Name )
7684 }
77-
78- executor , err := r .New (m .Config )
79- if err != nil {
80- return nil , err
81- }
8285 return executor , nil
8386}
8487
85- type PluginConfiguration json. RawMessage
88+ type PluginConfiguration map [ string ] interface {}
8689
87- func (m PluginConfiguration ) MarshalYAML () (interface {}, error ) {
88- if len (m ) == 0 {
89- return nil , nil
90- }
91- data := make (map [string ]interface {})
92- err := json .Unmarshal (m , & data )
93- if err != nil {
94- return nil , err
90+ func (m PluginConfiguration ) GetString (key string , def string ) string {
91+ val , ok := m [key ]
92+ if ! ok {
93+ return def
9594 }
96- return data , nil
95+ return val .( string )
9796}
9897
99- func (m PluginConfiguration ) MarshalJSON () ([]byte , error ) {
98+ func (m * PluginConfiguration ) Scan (src interface {}) error {
99+ return json .Unmarshal (src .([]byte ), m )
100+ }
101+
102+ func (m PluginConfiguration ) Value () (driver.Value , error ) {
100103 if m == nil {
101- return []byte ("null" ), nil
104+ return []byte (`{}` ), nil
102105 }
103- return m , nil
106+ return json . Marshal ( m )
104107}
105108
106109func (m * PluginConfiguration ) UnmarshalJSON (data []byte ) error {
107- if m == nil {
108- return errors .New ("json.RawMessage: UnmarshalJSON on nil pointer" )
110+ v := make (map [string ]interface {})
111+ if err := json .Unmarshal (data , & v ); err != nil {
112+ return err
109113 }
110- * m = append (( * m )[ 0 : 0 ], data ... )
114+ * m = v
111115 return nil
112116}
0 commit comments