5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 07:29:56 +08:00
wails/v3/pkg/application/messageprocessor_params.go
2023-08-18 09:58:43 +10:00

202 lines
3.1 KiB
Go

package application
import (
"encoding/json"
"fmt"
"strconv"
)
type QueryParams map[string][]string
func (qp QueryParams) String(key string) *string {
if qp == nil {
return nil
}
values := qp[key]
if len(values) == 0 {
return nil
}
return &values[0]
}
func (qp QueryParams) Int(key string) *int {
val := qp.String(key)
if val == nil {
return nil
}
result, err := strconv.Atoi(*val)
if err != nil {
return nil
}
return &result
}
func (qp QueryParams) UInt8(key string) *uint8 {
val := qp.String(key)
if val == nil {
return nil
}
intResult, err := strconv.Atoi(*val)
if err != nil {
return nil
}
if intResult < 0 {
intResult = 0
}
if intResult > 255 {
intResult = 255
}
var result = uint8(intResult)
return &result
}
func (qp QueryParams) UInt(key string) *uint {
val := qp.String(key)
if val == nil {
return nil
}
intResult, err := strconv.Atoi(*val)
if err != nil {
return nil
}
if intResult < 0 {
intResult = 0
}
if intResult > 255 {
intResult = 255
}
var result = uint(intResult)
return &result
}
func (qp QueryParams) Bool(key string) *bool {
val := qp.String(key)
if val == nil {
return nil
}
result, err := strconv.ParseBool(*val)
if err != nil {
return nil
}
return &result
}
func (qp QueryParams) Float64(key string) *float64 {
val := qp.String(key)
if val == nil {
return nil
}
result, err := strconv.ParseFloat(*val, 64)
if err != nil {
return nil
}
return &result
}
func (qp QueryParams) ToStruct(str any) error {
args := qp["args"]
if len(args) == 1 {
return json.Unmarshal([]byte(args[0]), &str)
}
return nil
}
type Args struct {
data map[string]any
}
func (a *Args) String(key string) *string {
if a == nil {
return nil
}
if val := a.data[key]; val != nil {
result := fmt.Sprintf("%v", val)
return &result
}
return nil
}
func (a *Args) Int(s string) *int {
if a == nil {
return nil
}
if val := a.data[s]; val != nil {
return convertNumber[int](val)
}
return nil
}
func convertNumber[T int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64](val any) *T {
if val == nil {
return nil
}
var result T
switch v := val.(type) {
case T:
result = v
case float64:
result = T(v)
}
return &result
}
func (a *Args) UInt8(s string) *uint8 {
if a == nil {
return nil
}
if val := a.data[s]; val != nil {
return convertNumber[uint8](val)
}
return nil
}
func (a *Args) UInt(s string) *uint {
if a == nil {
return nil
}
if val := a.data[s]; val != nil {
return convertNumber[uint](val)
}
return nil
}
func (a *Args) Float64(s string) *float64 {
if a == nil {
return nil
}
if val := a.data[s]; val != nil {
result := val.(float64)
return &result
}
return nil
}
func (a *Args) Bool(s string) *bool {
if a == nil {
return nil
}
if val := a.data[s]; val != nil {
result := val.(bool)
return &result
}
return nil
}
func (qp QueryParams) Args() (*Args, error) {
argData := qp["args"]
var result = &Args{
data: make(map[string]any),
}
if len(argData) == 1 {
err := json.Unmarshal([]byte(argData[0]), &result.data)
if err != nil {
return nil, err
}
}
return result, nil
}