Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add ability to convert between types consistenly #825

Merged
merged 1 commit into from
Mar 9, 2022

Conversation

jacobbednarz
Copy link
Member

@jacobbednarz jacobbednarz commented Mar 8, 2022

In our downstream systems and tools (terraform-provider-cloudflare,
cf-terraforming) we often have to swap between Golang types and pseudo
types. One example is with Terraform schemas and our struct types. There
isn't a consistent way which means they are all implemented slightly
different and there isn't a great convention. This commit aims to solve
that by introducing a standard to adhear to by introducing a number of
helper methods.

  • <type>Ptr: Accepts a value and returns a pointer.
  • <type>Value: Accepts a pointer and returns a value.
  • <type>PtrSlice: Accepts a slice of values and returns a slice of pointers.
  • <type>ValueSlice: Accepts a slice of pointers and returns a slice of values.
  • <type>Map: Accepts a string map of values into a string map of pointers.
  • <type>ValueMap: Accepts a string map of pointers into a string map of values.

Example in Terraform where the schema is a string but we want a pointer.

examplePtr := cloudflare.StringPtr(d.Get("example").(string))

In our downstream systems and tools (terraform-provider-cloudflare,
cf-terraforming) we often have to swap between Golang types and pseudo
types. One example is with Terraform schemas and our struct types. There
isn't a consistent way which means they are all implemented slightly
different and there isn't a great convention. This commit aims to solve
that by introducing a standard to adhear to by introducing a number of
helper methods.

- <type>Ptr: Accepts a value and returns a pointer.
- <type>Value: Accepts a pointer and returns a value.
- <type>PtrSlice: Accepts a slice of values and returns a slice of pointers.
- <type>ValueSlice: Accepts a slice of pointers and returns a slice of values.
- <type>Map: Accepts a string map of values into a string map of pointers.
- <type>ValueMap: Accepts a string map of pointers into a string map of values.

Example in Terraform where the schema is a string but we want a pointer.

```go
examplePtr := cloudflare.StringPtr(d.Get("example").(string))
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant