build uppon paramParser
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package paramParser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -10,22 +12,82 @@ type ParamsParser struct {
|
||||
urlParams url.Values
|
||||
}
|
||||
|
||||
type NoValueError struct {
|
||||
Key string
|
||||
}
|
||||
|
||||
func (e *NoValueError) Error() string {
|
||||
return fmt.Sprintf("No value found for key %s", e.Key)
|
||||
}
|
||||
|
||||
func New(_urlParams url.Values) ParamsParser {
|
||||
return ParamsParser{
|
||||
urlParams: _urlParams,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *ParamsParser) ParseTimestamp(key string, format string, fallback time.Time) time.Time {
|
||||
paramTimestamp := p.urlParams.Get(key)
|
||||
if paramTimestamp == "" {
|
||||
func (p *ParamsParser) ParseTimestampFallback(key string, format string, fallback time.Time) time.Time {
|
||||
if !p.urlParams.Has(key) {
|
||||
return fallback
|
||||
}
|
||||
paramTimestamp := p.urlParams.Get(key)
|
||||
if timestamp, err := time.Parse(format, paramTimestamp); err == nil {
|
||||
return timestamp
|
||||
} else {
|
||||
slog.Warn("Error parsing HTTP Params to timestamp", slog.Any("key", key), slog.Any("error", err))
|
||||
slog.Warn("Error parsing HTTP Params to time.Time", slog.Any("key", key), slog.Any("error", err))
|
||||
return fallback
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (p *ParamsParser) ParseTimestamp(key string, format string) (time.Time, error) {
|
||||
if !p.urlParams.Has(key) {
|
||||
return time.Time{}, &NoValueError{Key: key}
|
||||
}
|
||||
paramTimestamp := p.urlParams.Get(key)
|
||||
if timestamp, err := time.Parse(format, paramTimestamp); err == nil {
|
||||
return timestamp, nil
|
||||
} else {
|
||||
slog.Debug("Error parsing HTTP Params to time.Time", slog.Any("key", key), slog.Any("error", err))
|
||||
return timestamp, err
|
||||
}
|
||||
}
|
||||
|
||||
func (p *ParamsParser) ParseStringFallback(key string, fallback string) string {
|
||||
if !p.urlParams.Has(key) {
|
||||
return fallback
|
||||
}
|
||||
return p.urlParams.Get(key)
|
||||
}
|
||||
|
||||
func (p *ParamsParser) ParseString(key string, fallback string) (string, error) {
|
||||
if !p.urlParams.Has(key) {
|
||||
return "", &NoValueError{Key: key}
|
||||
}
|
||||
return p.urlParams.Get(key), nil
|
||||
}
|
||||
|
||||
func (p *ParamsParser) ParseIntFallback(key string, fallback int) int {
|
||||
if !p.urlParams.Has(key) {
|
||||
return fallback
|
||||
}
|
||||
paramInt := p.urlParams.Get(key)
|
||||
if result, err := strconv.Atoi(paramInt); err == nil {
|
||||
return result
|
||||
} else {
|
||||
slog.Warn("Error parsing HTTP Params to Int", slog.Any("key", key), slog.Any("error", err))
|
||||
return fallback
|
||||
}
|
||||
}
|
||||
|
||||
func (p *ParamsParser) ParseInt(key string) (int, error) {
|
||||
if !p.urlParams.Has(key) {
|
||||
return 0, &NoValueError{Key: key}
|
||||
}
|
||||
paramInt := p.urlParams.Get(key)
|
||||
if result, err := strconv.Atoi(paramInt); err == nil {
|
||||
return result, nil
|
||||
} else {
|
||||
slog.Debug("Error parsing HTTP Params to Int", slog.Any("key", key), slog.Any("error", err))
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user