1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use reqores::ServerRequest;
use worker::Request;

pub struct CfWorkerServerRequest {
    request: Request,
    body: Vec<u8>,
}

impl CfWorkerServerRequest {
    pub async fn new(mut request: Request) -> worker::Result<Self> {
        let body = request.bytes().await?;
        Ok(Self { request, body })
    }
}

impl ServerRequest for CfWorkerServerRequest {
    fn body(&self) -> &[u8] {
        &self.body
    }

    fn header(&self, key: &str) -> Option<String> {
        self.request.headers().get(key).ok().flatten()
    }
}

pub async fn decode_request(request: Request) -> worker::Result<CfWorkerServerRequest> {
    CfWorkerServerRequest::new(request).await
}