115 lines
2.5 KiB
Go
115 lines
2.5 KiB
Go
package sushi
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
const RouteParamsCtxKey = "route_params"
|
|
|
|
type ParamValue struct {
|
|
value string
|
|
exists bool
|
|
}
|
|
|
|
// RouteParam gets a route parameter by index for chaining
|
|
func (ctx Ctx) RouteParam(index int) ParamValue {
|
|
if params, ok := ctx.UserValue(RouteParamsCtxKey).([]string); ok {
|
|
if index >= 0 && index < len(params) {
|
|
return ParamValue{value: params[index], exists: true}
|
|
}
|
|
}
|
|
return ParamValue{value: "", exists: false}
|
|
}
|
|
|
|
// Param gets a route parameter by name for chaining (requires named params)
|
|
func (ctx Ctx) Param(name string) ParamValue {
|
|
if paramMap, ok := ctx.UserValue("param_names").(map[string]string); ok {
|
|
if value, exists := paramMap[name]; exists {
|
|
return ParamValue{value: value, exists: true}
|
|
}
|
|
}
|
|
return ParamValue{value: "", exists: false}
|
|
}
|
|
|
|
// String returns the value as string
|
|
func (p ParamValue) String() string {
|
|
return p.value
|
|
}
|
|
|
|
// StringDefault returns string with default value
|
|
func (p ParamValue) StringDefault(defaultValue string) string {
|
|
if p.value == "" {
|
|
return defaultValue
|
|
}
|
|
return p.value
|
|
}
|
|
|
|
// Int returns the value as integer
|
|
func (p ParamValue) Int() int {
|
|
if p.value == "" {
|
|
return 0
|
|
}
|
|
if parsed, err := strconv.Atoi(p.value); err == nil {
|
|
return parsed
|
|
}
|
|
return 0
|
|
}
|
|
|
|
// IntDefault returns integer with default value
|
|
func (p ParamValue) IntDefault(defaultValue int) int {
|
|
if p.value == "" {
|
|
return defaultValue
|
|
}
|
|
if parsed, err := strconv.Atoi(p.value); err == nil {
|
|
return parsed
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// Float returns the value as float64
|
|
func (p ParamValue) Float() float64 {
|
|
if p.value == "" {
|
|
return 0.0
|
|
}
|
|
if parsed, err := strconv.ParseFloat(p.value, 64); err == nil {
|
|
return parsed
|
|
}
|
|
return 0.0
|
|
}
|
|
|
|
// FloatDefault returns float64 with default value
|
|
func (p ParamValue) FloatDefault(defaultValue float64) float64 {
|
|
if p.value == "" {
|
|
return defaultValue
|
|
}
|
|
if parsed, err := strconv.ParseFloat(p.value, 64); err == nil {
|
|
return parsed
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// Bool returns the value as boolean
|
|
func (p ParamValue) Bool() bool {
|
|
value := strings.ToLower(p.value)
|
|
return value == "true" || value == "on" || value == "1" || value == "yes"
|
|
}
|
|
|
|
// BoolDefault returns boolean with default value
|
|
func (p ParamValue) BoolDefault(defaultValue bool) bool {
|
|
if p.value == "" {
|
|
return defaultValue
|
|
}
|
|
return p.Bool()
|
|
}
|
|
|
|
// Exists returns true if the parameter exists
|
|
func (p ParamValue) Exists() bool {
|
|
return p.exists
|
|
}
|
|
|
|
// IsEmpty returns true if the parameter is empty or doesn't exist
|
|
func (p ParamValue) IsEmpty() bool {
|
|
return p.value == ""
|
|
}
|