package runner import ( "sync" "github.com/valyala/fasthttp" ) // Response represents a unified response from script execution type Response struct { // Basic properties Body any // Body content (any type) Metadata map[string]any // Additional metadata // HTTP specific properties Status int // HTTP status code Headers map[string]string // HTTP headers Cookies []*fasthttp.Cookie // HTTP cookies // Session information SessionID string // Session ID SessionData map[string]any // Session data SessionModified bool // Whether session was modified } // Response pool to reduce allocations var responsePool = sync.Pool{ New: func() any { return &Response{ Status: 200, Headers: make(map[string]string, 8), Metadata: make(map[string]any, 8), Cookies: make([]*fasthttp.Cookie, 0, 4), SessionData: make(map[string]any, 8), } }, } // NewResponse creates a new response object from the pool func NewResponse() *Response { return responsePool.Get().(*Response) } // Release returns a response to the pool after cleaning it func ReleaseResponse(resp *Response) { if resp == nil { return } // Reset fields to default values resp.Body = nil resp.Status = 200 // Clear maps for k := range resp.Headers { delete(resp.Headers, k) } for k := range resp.Metadata { delete(resp.Metadata, k) } for k := range resp.SessionData { delete(resp.SessionData, k) } // Clear cookies resp.Cookies = resp.Cookies[:0] // Reset session info resp.SessionID = "" resp.SessionModified = false // Return to pool responsePool.Put(resp) }