mirror of
https://git.proxmox.com/git/proxmox
synced 2025-05-10 02:06:00 +00:00
proxmox_api - ApiHandler: rename Async into AsyncHttp
And improve docs.
This commit is contained in:
parent
5721d21a5e
commit
edb41c1929
@ -220,7 +220,7 @@ fn dump_method_definition(method: &str, path: &str, def: Option<&ApiMethod>) ->
|
|||||||
|
|
||||||
let mut method = method;
|
let mut method = method;
|
||||||
|
|
||||||
if let ApiHandler::Async(_) = api_method.handler {
|
if let ApiHandler::AsyncHttp(_) = api_method.handler {
|
||||||
method = if method == "POST" { "UPLOAD" } else { method };
|
method = if method == "POST" { "UPLOAD" } else { method };
|
||||||
method = if method == "GET" { "DOWNLOAD" } else { method };
|
method = if method == "GET" { "DOWNLOAD" } else { method };
|
||||||
}
|
}
|
||||||
|
@ -26,13 +26,64 @@ pub use router::Router;
|
|||||||
pub use error::HttpError;
|
pub use error::HttpError;
|
||||||
|
|
||||||
/// A synchronous API handler gets a json Value as input and returns a json Value as output.
|
/// A synchronous API handler gets a json Value as input and returns a json Value as output.
|
||||||
|
///
|
||||||
|
/// Most API handler are synchronous. Use this to define such handler:
|
||||||
|
/// ```
|
||||||
|
/// # use failure::*;
|
||||||
|
/// # use serde_json::{json, Value};
|
||||||
|
/// # use proxmox_api::{*, schema::*};
|
||||||
|
/// #
|
||||||
|
/// fn hello(
|
||||||
|
/// param: Value,
|
||||||
|
/// info: &ApiMethod,
|
||||||
|
/// rpcenv: &mut dyn RpcEnvironment,
|
||||||
|
/// ) -> Result<Value, Error> {
|
||||||
|
/// Ok(json!("hello world!"))
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// const API_METHOD_HELLO: ApiMethod = ApiMethod::new(
|
||||||
|
/// &ApiHandler::Sync(&hello),
|
||||||
|
/// &ObjectSchema::new("Hello World Example", &[])
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
pub type ApiHandlerFn = &'static (dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<Value, Error>
|
pub type ApiHandlerFn = &'static (dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<Value, Error>
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync
|
+ Sync
|
||||||
+ 'static);
|
+ 'static);
|
||||||
|
|
||||||
/// Asynchronous API handlers get more lower level access to request data.
|
/// Asynchronous HTTP API handlers
|
||||||
pub type ApiAsyncHandlerFn = &'static (dyn Fn(Parts, Body, Value, &'static ApiMethod, Box<dyn RpcEnvironment>) -> ApiFuture
|
///
|
||||||
|
/// They get low level access to request and response data. Use this
|
||||||
|
/// to implement custom upload/download functions.
|
||||||
|
/// ```
|
||||||
|
/// # use failure::*;
|
||||||
|
/// # use serde_json::{json, Value};
|
||||||
|
/// # use proxmox_api::{*, schema::*};
|
||||||
|
/// #
|
||||||
|
/// use futures::*;
|
||||||
|
/// use hyper::{Body, Response, http::request::Parts};
|
||||||
|
///
|
||||||
|
/// fn low_level_hello(
|
||||||
|
/// parts: Parts,
|
||||||
|
/// req_body: Body,
|
||||||
|
/// param: Value,
|
||||||
|
/// info: &ApiMethod,
|
||||||
|
/// rpcenv: Box<dyn RpcEnvironment>,
|
||||||
|
/// ) -> ApiFuture {
|
||||||
|
/// async move {
|
||||||
|
/// let response = http::Response::builder()
|
||||||
|
/// .status(200)
|
||||||
|
/// .body(Body::from("Hello world!"))?;
|
||||||
|
/// Ok(response)
|
||||||
|
/// }.boxed()
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// const API_METHOD_LOW_LEVEL_HELLO: ApiMethod = ApiMethod::new(
|
||||||
|
/// &ApiHandler::AsyncHttp(&low_level_hello),
|
||||||
|
/// &ObjectSchema::new("Hello World Example (low level)", &[])
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
pub type ApiAsyncHttpHandlerFn = &'static (dyn Fn(Parts, Body, Value, &'static ApiMethod, Box<dyn RpcEnvironment>) -> ApiFuture
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync
|
+ Sync
|
||||||
+ 'static);
|
+ 'static);
|
||||||
@ -40,9 +91,10 @@ pub type ApiAsyncHandlerFn = &'static (dyn Fn(Parts, Body, Value, &'static ApiMe
|
|||||||
/// The output of an asynchronous API handler is a futrue yielding a `Response`.
|
/// The output of an asynchronous API handler is a futrue yielding a `Response`.
|
||||||
pub type ApiFuture = Pin<Box<dyn Future<Output = Result<Response<Body>, failure::Error>> + Send>>;
|
pub type ApiFuture = Pin<Box<dyn Future<Output = Result<Response<Body>, failure::Error>> + Send>>;
|
||||||
|
|
||||||
|
/// Enum for different types of API handler functions.
|
||||||
pub enum ApiHandler {
|
pub enum ApiHandler {
|
||||||
Sync(ApiHandlerFn),
|
Sync(ApiHandlerFn),
|
||||||
Async(ApiAsyncHandlerFn),
|
AsyncHttp(ApiAsyncHttpHandlerFn),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This struct defines synchronous API call which returns the restulkt as json `Value`
|
/// This struct defines synchronous API call which returns the restulkt as json `Value`
|
||||||
|
Loading…
Reference in New Issue
Block a user