Skip to content

Commit

Permalink
Use generic environment variable function
Browse files Browse the repository at this point in the history
  • Loading branch information
tygern committed Mar 22, 2024
1 parent 003f432 commit 5bc60f6
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 11 deletions.
2 changes: 1 addition & 1 deletion cmd/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

func main() {
host := websupport.EnvironmentVariable("HOST", "")
port := websupport.IntegerEnvironmentVariable("PORT", 8777)
port := websupport.EnvironmentVariable("PORT", 8777)

server := websupport.NewServer(app.Handlers(true))

Expand Down
28 changes: 18 additions & 10 deletions pkg/websupport/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,28 @@ import (
"strconv"
)

func EnvironmentVariable(variableName string, defaultValue string) string {
type intOrString interface {
int | string
}

func EnvironmentVariable[T intOrString](variableName string, defaultValue T) T {
value, found := os.LookupEnv(variableName)
if found {
return value
} else {
if !found {
return defaultValue
}
}

func IntegerEnvironmentVariable(variableName string, defaultValue int) int {
value, err := strconv.Atoi(os.Getenv(variableName))
if err != nil {
return defaultValue
var result T

switch typedReference := any(&result).(type) {
case *string:
*typedReference = value
case *int:
i, err := strconv.Atoi(value)
if err != nil {
return defaultValue
}
*typedReference = i
}

return value
return result
}
32 changes: 32 additions & 0 deletions pkg/websupport/environment_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package websupport_test

import (
"github.com/initialcapacity/go-streaming/pkg/websupport"
"github.com/stretchr/testify/assert"
"os"
"testing"
)

func set(t *testing.T, name, value string) {
err := os.Setenv(name, value)
assert.NoError(t, err)
}

func unset(t *testing.T, name string) {
err := os.Unsetenv(name)
assert.NoError(t, err)
}

func TestEnvironmentVariable(t *testing.T) {
set(t, "NOT_NUMBER", "hello")
set(t, "NUMBER", "39")
unset(t, "NOT_PRESENT")

assert.Equal(t, "hello", websupport.EnvironmentVariable("NOT_NUMBER", "pickles"))
assert.Equal(t, "39", websupport.EnvironmentVariable("NUMBER", "pickles"))
assert.Equal(t, "pickles", websupport.EnvironmentVariable("NOT_PRESENT", "pickles"))

assert.Equal(t, 867, websupport.EnvironmentVariable("NOT_NUMBER", 867))
assert.Equal(t, 39, websupport.EnvironmentVariable("NUMBER", 867))
assert.Equal(t, 867, websupport.EnvironmentVariable("NOT_PRESENT", 867))
}

0 comments on commit 5bc60f6

Please sign in to comment.