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 }