0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-06 22:14:01 +00:00
terraform-provider-proxmox/proxmox/helpers/ptr/ptr.go
MacherelR 48bb57f0c7 fix(sdn): resolve linter warnings and apply gofumpt formatting
Signed-off-by: MacherelR <64424331+MacherelR@users.noreply.github.com>
2025-06-24 08:32:48 +02:00

69 lines
1.4 KiB
Go

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
package ptr
import (
"strings"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
// Ptr creates a ptr from a value to use it inline.
func Ptr[T any](val T) *T {
return &val
}
// Or will dereference a pointer and return the given value if it's nil.
func Or[T any](p *T, or T) T {
if p != nil {
return *p
}
return or
}
// Eq compares two pointers and returns true if they are equal.
func Eq[T comparable](a, b *T) bool {
if a == nil && b == nil {
return true
}
if a == nil || b == nil {
return false
}
return *a == *b
}
// UpdateIfChanged updates dst with src if src is not nil and different from dst.
// Returns true if an update was made.
func UpdateIfChanged[T comparable](dst **T, src *T) bool {
if src != nil && !Eq(*dst, src) {
*dst = src
return true
}
return false
}
// PtrOrNil safely gets a value of any type from schema.ResourceData.
// If the key is missing, returns nil. For strings, also returns nil if empty or whitespace.
func PtrOrNil[T any](d *schema.ResourceData, key string) *T {
if v, ok := d.GetOk(key); ok {
val := v.(T)
// Special case: skip empty/whitespace-only strings
if s, ok := any(val).(string); ok && strings.TrimSpace(s) == "" {
return nil
}
return &val
}
return nil
}