diff --git a/core/http/queries.go b/core/http/queries.go new file mode 100644 index 0000000..46f8ff6 --- /dev/null +++ b/core/http/queries.go @@ -0,0 +1,37 @@ +package http + +import "net/http" + +// QueryToLua converts HTTP query parameters to a map that can be used with LuaJIT. +// Single value parameters are stored as strings. +// Multi-value parameters are converted to []any arrays. +func QueryToLua(r *http.Request) map[string]any { + if r == nil || r.URL == nil { + return nil + } + + query := r.URL.Query() + if len(query) == 0 { + return nil // Avoid allocation for empty queries + } + + result := make(map[string]any, len(query)) + for key, values := range query { + switch len(values) { + case 0: + // Skip empty values + case 1: + // Single value + result[key] = values[0] + default: + // Multiple values - convert to []any + arr := make([]any, len(values)) + for i, v := range values { + arr[i] = v + } + result[key] = arr + } + } + + return result +}