94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package paramParser
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"net/url"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
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(params url.Values) ParamsParser {
|
|
return ParamsParser{
|
|
urlParams: params,
|
|
}
|
|
}
|
|
|
|
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 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) (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
|
|
}
|
|
}
|