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  }