Zippytal-Node/utitlity.go

93 lines
2.2 KiB
Go

package localserver
import (
"fmt"
"sync/atomic"
)
func validateRequest(req map[string]string, entries ...string) (err error) {
for _, entry := range entries {
if _, ok := req[entry]; !ok {
err = fmt.Errorf("no field %s in req payload", entry)
return
}
}
return
}
func ToStringSlice(slice []any) (strSlice []string, err error) {
strSlice = []string{}
for _, value := range slice {
if strValue, ok := value.(string); ok {
strSlice = append(strSlice, strValue)
} else {
err = fmt.Errorf("value in slice of wrong type")
return
}
}
return
}
func atomicallyExecute(flag *uint32, job func() (err error)) (err error) {
for {
if atomic.CompareAndSwapUint32(flag, 0, 1) {
defer atomic.SwapUint32(flag, 0)
err = job()
break
}
}
return
}
func VerifyFieldsString(payload map[string]any, fields ...string) (err error) {
for _, field := range fields {
if _, ok := payload[field]; !ok {
err = fmt.Errorf("no field %s in payload", field)
return
} else if _, ok := payload[field].(string); !ok {
err = fmt.Errorf("field %s in payload is not a string", field)
return
}
}
return
}
func VerifyFieldsBool(payload map[string]any, fields ...string) (err error) {
for _, field := range fields {
if _, ok := payload[field]; !ok {
err = fmt.Errorf("no field %s in payload", field)
return
} else if _, ok := payload[field].(bool); !ok {
err = fmt.Errorf("field %s in payload is not a bool", field)
return
}
}
return
}
func VerifyFieldsFloat64(payload map[string]any, fields ...string) (err error) {
for _, field := range fields {
if _, ok := payload[field]; !ok {
err = fmt.Errorf("no field %s in payload", field)
return
} else if _, ok := payload[field].(float64); !ok {
err = fmt.Errorf("field %s in payload is not a float64", field)
return
}
}
return
}
func VerifyFieldsSliceInterface(payload map[string]any, fields ...string) (err error) {
for _, field := range fields {
if _, ok := payload[field]; !ok {
err = fmt.Errorf("no field %s in payload", field)
return
} else if _, ok := payload[field].([]any); !ok {
err = fmt.Errorf("field %s in payload is not a []any", field)
return
}
}
return
}