github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/iextengine/builtin/impl.go (about) 1 /* 2 - Copyright (c) 2023-present unTill Software Development Group B.V. 3 @author Michael Saigachenko 4 */ 5 package iextenginebuiltin 6 7 import ( 8 "context" 9 "fmt" 10 11 "github.com/voedger/voedger/pkg/appdef" 12 "github.com/voedger/voedger/pkg/iextengine" 13 "github.com/voedger/voedger/pkg/istructs" 14 ) 15 16 type extensionEngineFactory struct { 17 funcs iextengine.BuiltInExtFuncs 18 } 19 20 type extensionEngine struct { 21 app istructs.AppQName 22 funcs iextengine.BuiltInExtFuncs 23 } 24 25 func (e extensionEngine) SetLimits(limits iextengine.ExtensionLimits) {} 26 27 func (e extensionEngine) Invoke(ctx context.Context, extName appdef.FullQName, io iextengine.IExtensionIO) (err error) { 28 defer func() { 29 if r := recover(); r != nil { 30 err = fmt.Errorf("extension panic: %v", r) 31 } 32 }() 33 if appFuncs, ok := e.funcs[e.app]; ok { 34 if f, ok := appFuncs[extName]; ok { 35 return f(ctx, io) 36 } 37 } 38 return undefinedExtension(e.app, extName.String()) 39 } 40 41 func (e extensionEngine) Close(ctx context.Context) {} 42 43 func (f extensionEngineFactory) New(_ context.Context, app istructs.AppQName, _ []iextengine.ExtensionPackage, _ *iextengine.ExtEngineConfig, numEngines int) (result []iextengine.IExtensionEngine, err error) { 44 result = make([]iextengine.IExtensionEngine, numEngines) 45 for i := 0; i < numEngines; i++ { 46 result[i] = &extensionEngine{app, f.funcs} 47 } 48 return 49 }