Skip to main content

info/
info.rs

1//! Example plugin that logs HTTP request information.
2//!
3//! This plugin demonstrates how to use the http-wasm-guest API to
4//! log request metadata, headers and body
5use http_wasm_guest::{
6    Guest, HostLogger,
7    host::{Request, Response, admin, feature},
8    register,
9};
10use log::info;
11
12/// Plugin that logs request information.
13struct Plugin {}
14
15impl Guest for Plugin {
16    /// Handles incoming requests by logging metadata and headers.
17    fn handle_request(&self, request: &Request, _response: &Response) -> (bool, i32) {
18        info!("Request: {} {} {} {}", request.method(), request.version(), request.uri(), request.source_addr());
19        for (name, values) in request.header.entries_iter() {
20            let values = values.iter().map(|v| format!("{v}")).collect::<Vec<_>>().join(", ");
21            info!("Header: {} [{}]", name, values);
22        }
23        info!("Body: {}", request.body.read());
24        (true, 0)
25    }
26    /// Handles outgoing responses by logging status and body.
27    fn handle_response(&self, _req_ctx: i32, _request: &Request, response: &Response, _is_error: bool) {
28        info!("Status: {}", response.status());
29    }
30}
31
32fn main() {
33    let _ = HostLogger::init();
34    admin::enable(feature::BufferRequest | feature::BufferResponse);
35    let plugin = Plugin {};
36    register(plugin);
37}