From b8d4b1de73fe36cfde311ff6279e8d102854996c Mon Sep 17 00:00:00 2001 From: Trial97 Date: Tue, 18 Dec 2018 10:55:06 +0200 Subject: [PATCH] Added methods for MapEvent and SafEvent to implement config.DataProvider --- engine/mapevent.go | 27 +++++++++++++++++++++++++++ engine/safevent.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/engine/mapevent.go b/engine/mapevent.go index a53dae8cd..513c38e85 100644 --- a/engine/mapevent.go +++ b/engine/mapevent.go @@ -20,6 +20,7 @@ package engine import ( "fmt" + "net" "time" "github.com/cgrates/cgrates/config" @@ -41,6 +42,32 @@ func (me MapEvent) String() string { return utils.ToJSON(me) } +func (me MapEvent) FieldAsInterface(fldPath []string) (interface{}, error) { + if len(fldPath) != 1 { + return nil, utils.ErrNotFound + } + fldIface, has := me[fldPath[0]] + if !has { + return nil, utils.ErrNotFound + } + return fldIface, nil +} + +func (me MapEvent) FieldAsString(fldPath []string) (string, error) { + if len(fldPath) != 1 { + return "", utils.ErrNotFound + } + return me.GetString(fldPath[0]) +} + +func (me MapEvent) AsNavigableMap([]*config.FCTemplate) (*config.NavigableMap, error) { + return config.NewNavigableMap(me), nil +} + +func (me MapEvent) RemoteHost() net.Addr { + return new(utils.LocalAddr) +} + func (me MapEvent) HasField(fldName string) (has bool) { _, has = me[fldName] return diff --git a/engine/safevent.go b/engine/safevent.go index 678f26cae..dfddfa4a2 100644 --- a/engine/safevent.go +++ b/engine/safevent.go @@ -19,6 +19,7 @@ along with this program. If not, see package engine import ( + "net" "sync" "time" @@ -55,6 +56,34 @@ func (se *SafEvent) String() (out string) { return } +func (se *SafEvent) FieldAsInterface(fldPath []string) (out interface{}, err error) { + se.RLock() + out, err = se.Me.FieldAsInterface(fldPath) + se.RUnlock() + return +} + +func (se *SafEvent) FieldAsString(fldPath []string) (out string, err error) { + se.RLock() + out, err = se.Me.FieldAsString(fldPath) + se.RUnlock() + return +} + +func (se *SafEvent) AsNavigableMap(fctemplate []*config.FCTemplate) (out *config.NavigableMap, err error) { + se.RLock() + out, err = se.Me.AsNavigableMap(fctemplate) + se.RUnlock() + return +} + +func (se *SafEvent) RemoteHost() (out net.Addr) { + se.RLock() + out = se.Me.RemoteHost() + se.RUnlock() + return +} + func (se *SafEvent) HasField(fldName string) (has bool) { se.RLock() has = se.Me.HasField(fldName)