#lang scheme/base
(require scheme/contract
scheme/match
web-server/private/request-structs)
(require (planet "pipeline.ss" ("untyped" "unlib.plt" 3)))
(define (make-parameterize-request-stage param)
(make-stage
'parameterize-request
(lambda (continue . args)
(match args
[(list) (continue)]
[(list-rest (? request? request) other)
(parameterize ([param request])
(apply continue (cdr args)))]
[else (apply continue args)]))))
(define (make-thread-cell-request-stage cell)
(make-stage
'thread-cell-request
(lambda (continue . args)
(match args
[(list) (continue)]
[(list-rest (? request? request) other)
(thread-cell-set! cell request)
(apply continue (cdr args))]
[else (apply continue args)]))))
(provide/contract
[make-parameterize-request-stage (-> (parameter/c (or/c request? false/c)) stage?)]
[make-thread-cell-request-stage (-> thread-cell? stage?)])