zclconf / go-cty

A type system for dynamic values in Go applications
MIT License
338 stars 70 forks source link

Add a deepmerge function #182

Closed luis-guimaraes-exoawk closed 2 months ago

luis-guimaraes-exoawk commented 2 months ago

Since Terraform mainly uses functions provided by go-cty, the need to introduce a deepmerge as a builtin function (hashicorp/terraform#31815) could be satisfied by go-cty and help standardize the implementation of deepmerge instead of relying on providers to implement it in an expected way.

apparentlymart commented 2 months ago

Hi @luis-guimaraes-exoawk! Thanks for this feature request.

I previously researched the idea of "deep merge" and found that there is no strong consensus about what exactly such an operation does: each library that offers it in some language seems to differ in the details.

Therefore I don't think it's a good fit for a "standard library" function, either here in cty or over in Terraform. Instead, I believe the Terraform team intends that the new capability for provider-contributed functions will allow the many different variations of "deep merge" to coexist in different providers, so that all of the different major opinions about how this function ought to behave can be simultaneously available to those who need them.

With all that said, Terraform already has plenty of functions that are not from this library, and HashiCorp also maintains its own library of functions that are used by its other products like Packer, and so if those downstreams choose to provide such a function as built-ins they are already empowered to do that without adding anything to this codebase, and then they can make the call on behalf of their users about exactly how the function should behave.

Since I don't intend to incorporate such a function into this codebase, I'm going to close this issue. Thanks again for the feedback.