| 
					
				 | 
			
			
				@@ -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), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |