Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ linters:
- exhaustruct
- wrapcheck
- wsl
- tagalign
settings:
lll:
# Max line length, lines longer will be reported.
Expand All @@ -15,17 +16,6 @@ linters:
# Tab width in spaces.
# Default: 1
tab-width: 1
tagliatelle:
# Checks the struct tag name case.
case:
rules:
json: snake
yaml: snake
mapstructure: snake
whatever: snake
recvcheck:
exclusions:
- "*.UnmarshalJSON"
wsl_v5:
allow-first-in-block: true
allow-whole-block: false
Expand Down
16 changes: 0 additions & 16 deletions any.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,6 @@ func NewEnvAnyVariable(name string) EnvAny {
}
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvAny) UnmarshalJSON(b []byte) error {
type Plain EnvAny

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

*ev = EnvAny(rawValue)

return nil
}

// IsZero checks if the instance is empty.
func (ev EnvAny) IsZero() bool {
return (ev.Variable == nil || *ev.Variable == "") &&
Expand Down
85 changes: 0 additions & 85 deletions environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
package goenvconf

import (
"encoding/json"
"errors"
"os"
"strconv"
Expand Down Expand Up @@ -39,27 +38,6 @@ func NewEnvStringVariable(name string) EnvString {
}
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvString) UnmarshalJSON(b []byte) error {
type Plain EnvString

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

value := EnvString(rawValue)
if value.IsZero() {
return ErrEnvironmentValueRequired
}

*ev = value

return nil
}

// IsZero checks if the instance is empty.
func (ev EnvString) IsZero() bool {
return (ev.Variable == nil || *ev.Variable == "") &&
Expand Down Expand Up @@ -185,27 +163,6 @@ func (ev EnvInt) Equal(target EnvInt) bool {
(ev.Variable != nil && target.Variable != nil && *ev.Variable == *target.Variable)
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvInt) UnmarshalJSON(b []byte) error {
type Plain EnvInt

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

value := EnvInt(rawValue)
if value.IsZero() {
return ErrEnvironmentValueRequired
}

*ev = value

return nil
}

// Get gets literal value or from system environment.
func (ev EnvInt) Get() (int64, error) {
if ev.IsZero() {
Expand Down Expand Up @@ -310,27 +267,6 @@ func (ev EnvBool) Equal(target EnvBool) bool {
(ev.Variable != nil && target.Variable != nil && *ev.Variable == *target.Variable)
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvBool) UnmarshalJSON(b []byte) error {
type Plain EnvBool

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

value := EnvBool(rawValue)
if value.IsZero() {
return ErrEnvironmentValueRequired
}

*ev = value

return nil
}

// Get gets literal value or from system environment.
func (ev EnvBool) Get() (bool, error) {
if ev.IsZero() {
Expand Down Expand Up @@ -435,27 +371,6 @@ func (ev EnvFloat) Equal(target EnvFloat) bool {
(ev.Variable != nil && target.Variable != nil && *ev.Variable == *target.Variable)
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvFloat) UnmarshalJSON(b []byte) error {
type Plain EnvFloat

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

value := EnvFloat(rawValue)
if value.IsZero() {
return ErrEnvironmentValueRequired
}

*ev = value

return nil
}

// Get gets literal value or from system environment.
func (ev EnvFloat) Get() (float64, error) {
if ev.IsZero() {
Expand Down
47 changes: 47 additions & 0 deletions error.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package goenvconf

import "fmt"

var (
// ErrEnvironmentValueRequired occurs when both value and env fields are null or empty.
ErrEnvironmentValueRequired = ParseEnvError{
Code: "EmptyEnv",
Detail: "require either value or env",
}

// ErrEnvironmentVariableValueRequired the error that occurs when the value from environment variable is empty.
ErrEnvironmentVariableValueRequired = ParseEnvError{
Code: "EmptyVar",
Detail: "the environment variable value is empty",
}
)

const (
// ErrCodeParseEnvFailed is the error code when parsing environment variable failed.
ErrCodeParseEnvFailed = "ParseEnvFailed"
)

// ParseEnvError structures a detailed error for parsed env.
type ParseEnvError struct {
Code string `json:"code" jsonschema:"enum=EmptyEnv,enum=EmptyVar,enum=ParseEnvFailed"`
Detail string `json:"detail"`
Hint string `json:"hint,omitempty"`
}

// NewParseEnvFailedError creates a [ParseEnvError] for parsing env variable errors.
func NewParseEnvFailedError(detail string, hint string) ParseEnvError {
return ParseEnvError{
Code: ErrCodeParseEnvFailed,
Detail: detail,
Hint: hint,
}
}

// Error returns the error message.
func (pee ParseEnvError) Error() string {
if pee.Hint != "" {
return fmt.Sprintf("%s: %s. Hint: %s", pee.Code, pee.Detail, pee.Hint)
}

return pee.Code + ": " + pee.Detail
}
65 changes: 0 additions & 65 deletions map.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package goenvconf

import (
"encoding/json"
"maps"
"os"
)
Expand Down Expand Up @@ -52,22 +51,6 @@ func (ev EnvMapString) Equal(target EnvMapString) bool {
(ev.Value != nil && target.Value != nil && maps.Equal(ev.Value, target.Value))
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvMapString) UnmarshalJSON(b []byte) error {
type Plain EnvMapString

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

*ev = EnvMapString(rawValue)

return nil
}

// Get gets literal value or from system environment.
func (ev EnvMapString) Get() (map[string]string, error) {
if ev.Variable != nil && *ev.Variable != "" {
Expand Down Expand Up @@ -142,22 +125,6 @@ func (ev EnvMapInt) Equal(target EnvMapInt) bool {
(ev.Value != nil && target.Value != nil && maps.Equal(ev.Value, target.Value))
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvMapInt) UnmarshalJSON(b []byte) error {
type Plain EnvMapInt

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

*ev = EnvMapInt(rawValue)

return nil
}

// Get gets literal value or from system environment.
func (ev EnvMapInt) Get() (map[string]int64, error) {
if ev.Variable != nil && *ev.Variable != "" {
Expand Down Expand Up @@ -232,22 +199,6 @@ func (ev EnvMapFloat) Equal(target EnvMapFloat) bool {
(ev.Value != nil && target.Value != nil && maps.Equal(ev.Value, target.Value))
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvMapFloat) UnmarshalJSON(b []byte) error {
type Plain EnvMapFloat

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

*ev = EnvMapFloat(rawValue)

return nil
}

// Get gets literal value or from system environment.
func (ev EnvMapFloat) Get() (map[string]float64, error) {
if ev.Variable != nil && *ev.Variable != "" {
Expand Down Expand Up @@ -322,22 +273,6 @@ func (ev EnvMapBool) Equal(target EnvMapBool) bool {
(ev.Value != nil && target.Value != nil && maps.Equal(ev.Value, target.Value))
}

// UnmarshalJSON implements json.Unmarshaler.
func (ev *EnvMapBool) UnmarshalJSON(b []byte) error {
type Plain EnvMapBool

var rawValue Plain

err := json.Unmarshal(b, &rawValue)
if err != nil {
return err
}

*ev = EnvMapBool(rawValue)

return nil
}

// Get gets literal value or from system environment.
func (ev EnvMapBool) Get() (map[string]bool, error) {
if ev.Variable != nil && *ev.Variable != "" {
Expand Down
8 changes: 4 additions & 4 deletions map_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func TestEnvMapString_GetCustom(t *testing.T) {
Name: "invalid_map_format",
Input: NewEnvMapStringVariable("INVALID_MAP"),
GetFunc: mockGetEnvFuncForMaps(map[string]string{"INVALID_MAP": "invalid_format_no_equals"}, false),
ErrorMsg: ErrParseStringFailed.Error(),
ErrorMsg: "ParseEnvFailed",
},
}

Expand Down Expand Up @@ -133,7 +133,7 @@ func TestEnvMapInt_GetCustom(t *testing.T) {
Name: "invalid_int_value",
Input: NewEnvMapIntVariable("INVALID_MAP"),
GetFunc: mockGetEnvFuncForMaps(map[string]string{"INVALID_MAP": "key=not_a_number"}, false),
ErrorMsg: ErrParseStringFailed.Error(),
ErrorMsg: "ParseEnvFailed",
},
}

Expand Down Expand Up @@ -198,7 +198,7 @@ func TestEnvMapFloat_GetCustom(t *testing.T) {
Name: "invalid_float_value",
Input: NewEnvMapFloatVariable("INVALID_MAP"),
GetFunc: mockGetEnvFuncForMaps(map[string]string{"INVALID_MAP": "key=not_a_float"}, false),
ErrorMsg: ErrParseStringFailed.Error(),
ErrorMsg: "ParseEnvFailed",
},
}

Expand Down Expand Up @@ -263,7 +263,7 @@ func TestEnvMapBool_GetCustom(t *testing.T) {
Name: "invalid_bool_value",
Input: NewEnvMapBoolVariable("INVALID_MAP"),
GetFunc: mockGetEnvFuncForMaps(map[string]string{"INVALID_MAP": "key=not_a_bool"}, false),
ErrorMsg: ErrParseStringFailed.Error(),
ErrorMsg: "ParseEnvFailed",
},
}

Expand Down
Loading
Loading