#[derive(Debug)]
#[cfg_attr(docsrs, doc(cfg(feature = "router")))]
pub struct PathParams<T>(pub T);
#[cfg_attr(docsrs, doc(cfg(feature = "router")))]
pub trait FromParams<'a> {
fn from_params(params: &[&'a str]) -> Self;
}
impl<'a> FromParams<'a> for PathParams<&'a str> {
fn from_params(params: &[&'a str]) -> Self {
let p1 = params.first().copied().unwrap_or_default();
PathParams(p1)
}
}
impl<'a> FromParams<'a> for PathParams<(&'a str,)> {
fn from_params(params: &[&'a str]) -> Self {
let p1 = params.first().copied().unwrap_or_default();
PathParams((p1,))
}
}
impl<'a> FromParams<'a> for PathParams<(&'a str, &'a str)> {
fn from_params(params: &[&'a str]) -> Self {
let p1 = params.first().copied().unwrap_or_default();
let p2 = params.get(1).copied().unwrap_or_default();
PathParams((p1, p2))
}
}
impl<'a> FromParams<'a> for PathParams<(&'a str, &'a str, &'a str)> {
fn from_params(params: &[&'a str]) -> Self {
let p1 = params.first().copied().unwrap_or_default();
let p2 = params.get(1).copied().unwrap_or_default();
let p3 = params.get(2).copied().unwrap_or_default();
PathParams((p1, p2, p3))
}
}
impl<'a> FromParams<'a> for PathParams<(&'a str, &'a str, &'a str, &'a str)> {
fn from_params(params: &[&'a str]) -> Self {
let p1 = params.first().copied().unwrap_or_default();
let p2 = params.get(1).copied().unwrap_or_default();
let p3 = params.get(2).copied().unwrap_or_default();
let p4 = params.get(3).copied().unwrap_or_default();
PathParams((p1, p2, p3, p4))
}
}
impl<'a> FromParams<'a> for PathParams<(&'a str, &'a str, &'a str, &'a str, &'a str)> {
fn from_params(params: &[&'a str]) -> Self {
let p1 = params.first().copied().unwrap_or_default();
let p2 = params.get(1).copied().unwrap_or_default();
let p3 = params.get(2).copied().unwrap_or_default();
let p4 = params.get(3).copied().unwrap_or_default();
let p5 = params.get(4).copied().unwrap_or_default();
PathParams((p1, p2, p3, p4, p5))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_from_params_tuple_str() {
let input = ["v1", "v2"];
let params: PathParams<(&str, &str)> = FromParams::from_params(&input);
assert_eq!(params.0.0, "v1");
assert_eq!(params.0.1, "v2");
}
}