summaryrefslogtreecommitdiff
path: root/utils/env/functions.go
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-01-15 15:53:17 +0530
committerBobby <[email protected]>2026-01-15 15:53:17 +0530
commitc8d0bbb5b54f5cec3ebb245f9a21d8a94b3bd944 (patch)
tree6a5c2500da90253ad07a0d5192071bb77f093d36 /utils/env/functions.go
downloadcafe-c8d0bbb5b54f5cec3ebb245f9a21d8a94b3bd944.tar.xz
cafe-c8d0bbb5b54f5cec3ebb245f9a21d8a94b3bd944.zip
Add initial project structure with Go Fiber framework and environment configuration
Diffstat (limited to 'utils/env/functions.go')
-rw-r--r--utils/env/functions.go97
1 files changed, 97 insertions, 0 deletions
diff --git a/utils/env/functions.go b/utils/env/functions.go
new file mode 100644
index 0000000..de03793
--- /dev/null
+++ b/utils/env/functions.go
@@ -0,0 +1,97 @@
+package env
+
+import (
+ "os"
+ "reflect"
+ "strconv"
+ "strings"
+ "time"
+)
+
+func getEnv(key, defaultVal string) string {
+ if value := os.Getenv(key); value != "" {
+ return value
+ }
+ return defaultVal
+}
+
+func getEnvBool(key string, defaultVal bool) bool {
+ if value := os.Getenv(key); value != "" {
+ if parsed, err := strconv.ParseBool(value); err == nil {
+ return parsed
+ }
+ }
+ return defaultVal
+}
+
+func getEnvDuration(key string, defaultVal time.Duration) time.Duration {
+ if value := os.Getenv(key); value != "" {
+ if parsed, err := time.ParseDuration(value); err == nil {
+ return parsed
+ }
+ }
+ return defaultVal
+}
+
+func getEnvInt(key string, defaultVal int64) int64 {
+ if value := os.Getenv(key); value != "" {
+ if parsed, err := strconv.ParseInt(value, 10, 64); err == nil {
+ return parsed
+ }
+ }
+ return defaultVal
+}
+
+func getEnvFloat(key string, defaultVal float64) float64 {
+ if value := os.Getenv(key); value != "" {
+ if parsed, err := strconv.ParseFloat(value, 64); err == nil {
+ return parsed
+ }
+ }
+ return defaultVal
+}
+
+func getEnvStringSlice(key string, defaultVal []string) []string {
+ if value := os.Getenv(key); value != "" {
+ parts := strings.Split(value, ",")
+ result := make([]string, 0, len(parts))
+ for _, part := range parts {
+ trimmed := strings.TrimSpace(part)
+ if trimmed != "" {
+ result = append(result, trimmed)
+ }
+ }
+ return result
+ }
+ return defaultVal
+}
+
+func Defaults[T any](config *T) *T {
+ v := reflect.ValueOf(config)
+ if v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct {
+ return config
+ }
+
+ elem := v.Elem()
+ t := elem.Type()
+ newStruct := reflect.New(t)
+ newElem := newStruct.Elem()
+
+ for i := range elem.NumField() {
+ field := newElem.Field(i)
+ fieldType := t.Field(i)
+
+ if !field.CanSet() {
+ continue
+ }
+
+ defaultVal := fieldType.Tag.Get("default")
+ if defaultVal == "" {
+ continue
+ }
+
+ setFieldDefault(field, defaultVal)
+ }
+
+ return newStruct.Interface().(*T)
+}