lieweb/
utils.rs

1#![allow(dead_code)]
2
3use std::future::Future;
4use std::pin::Pin;
5
6use crate::http;
7use crate::http::header::{HeaderName, HeaderValue};
8
9use rand::distributions::Alphanumeric;
10use rand::Rng;
11
12pub(crate) type BoxFuture<T, E> = Pin<Box<dyn Future<Output = Result<T, E>> + Send + 'static>>;
13pub(crate) type StdError = Box<dyn std::error::Error + Send + Sync + 'static>;
14
15pub(crate) fn parse_header<K, V>(
16    name: K,
17    value: V,
18) -> Result<(HeaderName, HeaderValue), crate::Error>
19where
20    HeaderName: TryFrom<K>,
21    <HeaderName as TryFrom<K>>::Error: Into<http::Error>,
22    HeaderValue: TryFrom<V>,
23    <HeaderValue as TryFrom<V>>::Error: Into<http::Error>,
24{
25    let name = <HeaderName as TryFrom<K>>::try_from(name).map_err(|e| {
26        let e = e.into();
27        crate::error_msg!("parse header name failed, err: {}", e)
28    })?;
29
30    let value = <HeaderValue as TryFrom<V>>::try_from(value).map_err(|e| {
31        let e = e.into();
32        crate::error_msg!("parse header value failed, err: {}", e)
33    })?;
34
35    Ok((name, value))
36}
37
38pub(crate) fn gen_random_string(length: usize) -> String {
39    rand::thread_rng()
40        .sample_iter(&Alphanumeric)
41        .map(char::from)
42        .take(length)
43        .collect::<String>()
44}
45
46#[macro_export]
47macro_rules! register_method {
48    ($func_name: ident, $method: expr) => {
49        pub fn $func_name<H, T>(&mut self, path: impl AsRef<str>, handler: H)
50        where
51            H: Handler<T> + Send + Sync + 'static,
52            T: 'static,
53        {
54            self.register($method, path, handler)
55        }
56    };
57}