|
@@ -0,0 +1,61 @@
|
|
|
|
+package provider
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "context"
|
|
|
|
+ "math"
|
|
|
|
+
|
|
|
|
+ "github.com/hashicorp/terraform-plugin-framework/function"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+var (
|
|
|
|
+ _ function.Function = &ComputeTaxFunction{}
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+type ComputeTaxFunction struct{}
|
|
|
|
+
|
|
|
|
+func NewComputeTaxFunction() function.Function {
|
|
|
|
+ return &ComputeTaxFunction{}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (f *ComputeTaxFunction) Metadata(ctx context.Context, req function.MetadataRequest, resp *function.MetadataResponse) {
|
|
|
|
+ resp.Name = "compute_tax"
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (f *ComputeTaxFunction) Definition(ctx context.Context, req function.DefinitionRequest, resp *function.DefinitionResponse) {
|
|
|
|
+ resp.Definition = function.Definition{
|
|
|
|
+ Parameters: []function.Parameter{
|
|
|
|
+ function.Float64Parameter{
|
|
|
|
+ Description: "Price of coffee item.",
|
|
|
|
+ Name: "price",
|
|
|
|
+ },
|
|
|
|
+ function.Float64Parameter{
|
|
|
|
+ Description: "Tax rate. 0.085 == 8.5%",
|
|
|
|
+ Name: "rate",
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ Return: function.Float64Return{},
|
|
|
|
+ Summary: "Compute tax for coffee",
|
|
|
|
+ Description: "Given a price and tax rate, return the total cost including tax.",
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (f *ComputeTaxFunction) Run(ctx context.Context, req function.RunRequest, resp *function.RunResponse) {
|
|
|
|
+ var (
|
|
|
|
+ price, rate, total float64
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ // 1. Read Terraform argument data into the variables.
|
|
|
|
+ resp.Error = function.ConcatFuncErrors(
|
|
|
|
+ resp.Error,
|
|
|
|
+ req.Arguments.Get(ctx, &price, &rate),
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ // 2. Perform the calculation
|
|
|
|
+ total = math.Round((price+price*rate)*100) / 100
|
|
|
|
+
|
|
|
|
+ // 3. Set the result on the state
|
|
|
|
+ resp.Error = function.ConcatFuncErrors(
|
|
|
|
+ resp.Error,
|
|
|
|
+ resp.Result.Set(ctx, total),
|
|
|
|
+ )
|
|
|
|
+}
|