internal/provider/module_source_function.go (40 lines of code) (raw):
package provider
import (
"context"
"github.com/hashicorp/terraform-plugin-framework/function"
"github.com/hashicorp/terraform-plugin-framework/types"
)
var _ function.Function = &ModuleSourceFunction{}
func NewModuleSourceFunction() function.Function {
return &ModuleSourceFunction{}
}
type ModuleSourceFunction struct {
}
func (m *ModuleSourceFunction) Metadata(ctx context.Context, req function.MetadataRequest, resp *function.MetadataResponse) {
resp.Name = "module_source"
}
func (m *ModuleSourceFunction) Definition(ctx context.Context, req function.DefinitionRequest, resp *function.DefinitionResponse) {
resp.Definition = function.Definition{
Summary: "`module_source` function",
MarkdownDescription: "This function takes in `${path.module}` and return the corresponding item's `Source` in `modules.json` file in the current root module's `.terraform/module` folder",
Parameters: []function.Parameter{
function.StringParameter{
Name: "module_path",
MarkdownDescription: "`${path.module}`",
},
},
Return: function.StringReturn{},
}
}
func (m *ModuleSourceFunction) Run(ctx context.Context, req function.RunRequest, resp *function.RunResponse) {
var modulePath string
resp.Error = function.ConcatFuncErrors(req.Arguments.Get(ctx, &modulePath))
if resp.Error != nil {
return
}
model := &ModuleSourceDataSourceModel{}
model.ModulePath = types.StringValue(modulePath)
model = withModuleSourceAndVersion(model)
s := model.ModuleSource.ValueString()
resp.Error = function.ConcatFuncErrors(resp.Result.Set(ctx, s))
}