1*b315a0a8SYosh use test_programs::proxy;
2*b315a0a8SYosh use test_programs::wasi::http::types::{
3*b315a0a8SYosh     Fields, IncomingRequest, OutgoingResponse, ResponseOutparam,
4*b315a0a8SYosh };
5*b315a0a8SYosh 
6*b315a0a8SYosh struct T;
7*b315a0a8SYosh 
8*b315a0a8SYosh proxy::export!(T);
9*b315a0a8SYosh 
10*b315a0a8SYosh impl proxy::exports::wasi::http::incoming_handler::Guest for T {
handle(request: IncomingRequest, outparam: ResponseOutparam)11*b315a0a8SYosh     fn handle(request: IncomingRequest, outparam: ResponseOutparam) {
12*b315a0a8SYosh         let headers = request.headers();
13*b315a0a8SYosh         let header_key = "env".to_string();
14*b315a0a8SYosh         let env_var = headers.get(&header_key);
15*b315a0a8SYosh         assert!(env_var.len() == 1, "should have exactly one `env` header");
16*b315a0a8SYosh         let key = std::str::from_utf8(&env_var[0]).unwrap();
17*b315a0a8SYosh         let fields = Fields::new();
18*b315a0a8SYosh         if let Ok(val) = std::env::var(key) {
19*b315a0a8SYosh             fields.set(&header_key, &[val.into_bytes()]).unwrap();
20*b315a0a8SYosh         }
21*b315a0a8SYosh         let resp = OutgoingResponse::new(fields);
22*b315a0a8SYosh         ResponseOutparam::set(outparam, Ok(resp));
23*b315a0a8SYosh     }
24*b315a0a8SYosh }
25*b315a0a8SYosh 
main()26*b315a0a8SYosh fn main() {}
27