GitRoot
craft your forge, build your project, grow your community freely
1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
2//
3// SPDX-License-Identifier: EUPL-1.2
4
5package plugin
6
7import (
8 "context"
9 "encoding/json"
10
11 "github.com/samber/oops"
12 "github.com/tetratelabs/wazero/api"
13 pluginLib "gitroot.dev/libs/golang/plugin"
14 "gitroot.dev/server/logger"
15)
16
17func (r *runtime) callPluginForConf(ctx context.Context, module api.Module, log *logger.Logger) ([]pluginLib.PluginRun, error) {
18 defaultConf := []pluginLib.PluginRun{}
19
20 free := module.ExportedFunction("free")
21 if defaultRun := module.ExportedFunction("defaultRun"); defaultRun != nil {
22 ptrSize, err := defaultRun.Call(ctx)
23 if err != nil {
24 return nil, oops.Wrapf(err, "defaultRun call")
25 }
26 defaultRunPtr := uint32(ptrSize[0] >> 32)
27 defaultRunSize := uint32(ptrSize[0])
28 if defaultRunPtr != 0 {
29 defer func() {
30 _, err := free.Call(ctx, uint64(defaultRunPtr))
31 if err != nil {
32 log.Error("can't free defaultRun", err)
33 }
34 }()
35 }
36 res, err := r.readString(module, "read memory conf", defaultRunPtr, defaultRunSize)
37 if err != nil {
38 return nil, oops.Wrapf(err, "can't read memory")
39 }
40 if res != "" {
41 if err = json.Unmarshal([]byte(res), &defaultConf); err != nil {
42 conf, err := r.readASString(module, "read conf", uint32(ptrSize[0]))
43 if err != nil {
44 return nil, oops.Wrapf(err, "can't readASString Configuration")
45 }
46 log.Debug("Conf receive from guest AS", logger.NewLoggerPair("json", conf))
47 if err = json.Unmarshal([]byte(conf), &defaultConf); err != nil {
48 return nil, oops.Wrapf(err, "can't unmarshal Configuration")
49 }
50 }
51 }
52 }
53 return defaultConf, nil
54}