// Code generated by ndpgen. DO NOT EDIT. // // This file contains client wrappers for the HTTP host service. // It is intended for use in Navidrome plugins built with extism-pdk. use extism_pdk::*; use serde::{Deserialize, Serialize}; /// HTTPRequest represents an outbound HTTP request from a plugin. #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct HttpRequest { pub method: String, pub url: String, #[serde(default)] pub headers: std::collections::HashMap, #[serde(default)] pub body: Vec, #[serde(default)] pub timeout_ms: i32, } /// HTTPResponse represents the response from an outbound HTTP request. #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct HttpResponse { pub status_code: i32, #[serde(default)] pub headers: std::collections::HashMap, #[serde(default)] pub body: Vec, } #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] struct HTTPSendRequest { request: HttpRequest, } #[derive(Debug, Clone, Deserialize)] #[serde(rename_all = "camelCase")] struct HTTPSendResponse { #[serde(default)] result: Option, #[serde(default)] error: Option, } #[host_fn] extern "ExtismHost" { fn http_send(input: Json) -> Json; } /// Send executes an HTTP request and returns the response. /// /// Parameters: /// - request: The HTTP request to execute, including method, URL, headers, body, and timeout /// /// Returns the HTTP response with status code, headers, and body. /// Network errors, timeouts, and permission failures are returned as errors. /// Successful HTTP calls (including 4xx/5xx status codes) return a non-nil response with nil error. /// /// # Arguments /// * `request` - HttpRequest parameter. /// /// # Returns /// The result value. /// /// # Errors /// Returns an error if the host function call fails. pub fn send(request: HttpRequest) -> Result, Error> { let response = unsafe { http_send(Json(HTTPSendRequest { request: request, }))? }; if let Some(err) = response.0.error { return Err(Error::msg(err)); } Ok(response.0.result) }