;;; SURFLET-RESPONSE: Surflets are expected to return this object type.
;;; STATUS is the status code, an exact integer. See httpd/response.scm
;;;  e.g. (status-code ok)
;;; CONTENT-TYPE is a string, most probably "text/html".
;;; HEADERS is a (maybe empty) list of pairs of (string or symbol);
;;;   Additional headers to send, e.g. '(("Cache-Control" . "no-cache")) or
;;;   '((Cache-Control . "no-cache")) etc.
;;; DATA is either
;;; * a string
;;; * a list of strings
;;; This list maybe extended to vectors later.
(define-record-type surflet-response :surflet-response
  (make-surflet-response status content-type headers data)
  surflet-response?
  (status surflet-response-status)
  (content-type surflet-response-content-type)
  (headers surflet-response-headers)
  (data surflet-response-data))

;; Allowed type for the data field.
(define (valid-surflet-response-data? data)
  (or (string? data) (list? data)))

;; For debug purposes
(define (surflet-response->string surflet-response)
  (format #f "#{SUrflet-response Status: ~a Content-Type: ~s Headers: ~s~%~s~%"
	  (surflet-response-status surflet-response)
	  (surflet-response-content-type surflet-response)
	  (surflet-response-headers surflet-response)
	  (surflet-response-data surflet-response)))