diff --git a/server/codegen/assets/templates/gocode/envoy/store_encode.go.tpl b/server/codegen/assets/templates/gocode/envoy/store_encode.go.tpl index f700e6124..55855982c 100644 --- a/server/codegen/assets/templates/gocode/envoy/store_encode.go.tpl +++ b/server/codegen/assets/templates/gocode/envoy/store_encode.go.tpl @@ -202,6 +202,10 @@ func (e StoreEncoder) encode{{.expIdent}}s(ctx context.Context, p envoyx.EncodeP } } + {{- if .envoy.store.postSetEncoder }} + err = e.post{{.expIdent}}sEncode(ctx, p, s, tree, nn) + {{end }} + return } diff --git a/server/codegen/schema/resource.cue b/server/codegen/schema/resource.cue index d0f469a9c..22b5927d5 100644 --- a/server/codegen/schema/resource.cue +++ b/server/codegen/schema/resource.cue @@ -203,6 +203,11 @@ import ( // enable or disable custom logic after the resource is imported extendedEncoder: bool | *false extendedSubResources: bool | *false + // temporary until I figure something better. + // the idea here is that after all of the modules (or resources x) are imported + // only then we should do something over them (like import records). + postSetEncoder: bool | *false + // enable or disable additional custom processing for determining // resource references diff --git a/server/compose/envoy/store_encode.gen.go b/server/compose/envoy/store_encode.gen.go index 67de79d52..a1f9d7529 100644 --- a/server/compose/envoy/store_encode.gen.go +++ b/server/compose/envoy/store_encode.gen.go @@ -421,6 +421,7 @@ func (e StoreEncoder) encodeModules(ctx context.Context, p envoyx.EncodeParams, return } } + err = e.postModulesEncode(ctx, p, s, tree, nn) return } @@ -499,12 +500,6 @@ func (e StoreEncoder) encodeModule(ctx context.Context, p envoyx.EncodeParams, s return } - err = e.encodeModuleExtendSubResources(ctx, p, s, n, tree) - if err != nil { - err = errors.Wrap(err, "failed to encode extended sub resources") - return - } - return } diff --git a/server/compose/envoy/store_encode.go b/server/compose/envoy/store_encode.go index 538f52249..44cec7fbd 100644 --- a/server/compose/envoy/store_encode.go +++ b/server/compose/envoy/store_encode.go @@ -165,15 +165,21 @@ func (e StoreEncoder) encodeModuleExtend(ctx context.Context, p envoyx.EncodePar return dl.ReplaceModel(ctx, models[0]) } -func (e StoreEncoder) encodeModuleExtendSubResources(ctx context.Context, p envoyx.EncodeParams, s store.Storer, n *envoyx.Node, tree envoyx.Traverser) (err error) { - cc := tree.ChildrenForResourceType(n, ComposeRecordDatasourceAuxType) - +func (e StoreEncoder) postModulesEncode(ctx context.Context, p envoyx.EncodeParams, s store.Storer, tree envoyx.Traverser, nn envoyx.NodeSet) (err error) { dl, err := e.grabDal(p) if err != nil { return } - return e.encodeRecordDatasources(ctx, p, s, dl, cc, tree) + for _, n := range nn { + cc := tree.ChildrenForResourceType(n, ComposeRecordDatasourceAuxType) + err = e.encodeRecordDatasources(ctx, p, s, dl, cc, tree) + if err != nil { + return + } + } + + return } func (e *StoreEncoder) grabDal(p envoyx.EncodeParams) (dl dal.FullService, err error) { diff --git a/server/compose/module.cue b/server/compose/module.cue index 849537b58..d8fbbae86 100644 --- a/server/compose/module.cue +++ b/server/compose/module.cue @@ -106,8 +106,8 @@ module: { }] } store: { + postSetEncoder: true extendedEncoder: true - extendedSubResources: true extendedFilterBuilder: true extendedDecoder: true }