use alloc::string::{String, ToString as _};
use crate::PathParams;
use super::ValueSetError;
impl PathParams for usize {
fn size(&self) -> usize {
1
}
fn value(&self, index: usize) -> String {
match index {
0 => self.to_string(),
_ => panic!(),
}
}
fn set_value(&mut self, index: usize, value: &str) -> Result<(), ValueSetError> {
match index {
0 => {
*self = value
.parse::<usize>()
.map_err(|err| ValueSetError::ParseFailed(err.to_string()))?;
Ok(())
}
_ => panic!(),
}
}
}
impl PathParams for String {
fn size(&self) -> usize {
1
}
fn value(&self, index: usize) -> String {
match index {
0 => self.to_string(),
_ => panic!(),
}
}
fn set_value(&mut self, index: usize, value: &str) -> Result<(), ValueSetError> {
match index {
0 => {
*self = value.to_string();
Ok(())
}
_ => panic!(),
}
}
}
impl PathParams for (usize, usize) {
fn size(&self) -> usize {
2
}
fn value(&self, index: usize) -> String {
match index {
0 => self.0.to_string(),
1 => self.1.to_string(),
_ => panic!(),
}
}
fn set_value(&mut self, index: usize, value: &str) -> Result<(), ValueSetError> {
match index {
0 => {
self.0 = value
.parse::<usize>()
.map_err(|err| ValueSetError::ParseFailed(err.to_string()))?;
Ok(())
}
1 => {
self.1 = value
.parse::<usize>()
.map_err(|err| ValueSetError::ParseFailed(err.to_string()))?;
Ok(())
}
_ => panic!(),
}
}
}
impl PathParams for (String, String) {
fn size(&self) -> usize {
2
}
fn value(&self, index: usize) -> String {
match index {
0 => self.0.to_string(),
1 => self.1.to_string(),
_ => panic!(),
}
}
fn set_value(&mut self, index: usize, value: &str) -> Result<(), ValueSetError> {
match index {
0 => {
self.0 = value.to_string();
Ok(())
}
1 => {
self.1 = value.to_string();
Ok(())
}
_ => panic!(),
}
}
}
impl PathParams for (usize, String) {
fn size(&self) -> usize {
2
}
fn value(&self, index: usize) -> String {
match index {
0 => self.0.to_string(),
1 => self.1.to_string(),
_ => panic!(),
}
}
fn set_value(&mut self, index: usize, value: &str) -> Result<(), ValueSetError> {
match index {
0 => {
self.0 = value
.parse::<usize>()
.map_err(|err| ValueSetError::ParseFailed(err.to_string()))?;
Ok(())
}
1 => {
self.1 = value.to_string();
Ok(())
}
_ => panic!(),
}
}
}
impl PathParams for (String, usize) {
fn size(&self) -> usize {
2
}
fn value(&self, index: usize) -> String {
match index {
0 => self.0.to_string(),
1 => self.1.to_string(),
_ => panic!(),
}
}
fn set_value(&mut self, index: usize, value: &str) -> Result<(), ValueSetError> {
match index {
0 => {
self.0 = value.to_string();
Ok(())
}
1 => {
self.1 = value
.parse::<usize>()
.map_err(|err| ValueSetError::ParseFailed(err.to_string()))?;
Ok(())
}
_ => panic!(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use alloc::vec;
#[test]
fn test_get_and_set_values() {
let mut path_params: usize = Default::default();
path_params.set_values(&["1".to_string()]).unwrap();
assert_eq!(path_params, 1);
assert_eq!(path_params.values(), vec!["1".to_string()]);
let mut path_params: String = Default::default();
path_params.set_values(&["foo".to_string()]).unwrap();
assert_eq!(path_params, "foo");
assert_eq!(path_params.values(), vec!["foo".to_string()]);
let mut path_params: (usize, usize) = Default::default();
path_params
.set_values(&["1".to_string(), "2".to_string()])
.unwrap();
assert_eq!(path_params, (1, 2));
assert_eq!(path_params.values(), vec!["1".to_string(), "2".to_string()]);
let mut path_params: (String, String) = Default::default();
path_params
.set_values(&["foo".to_string(), "bar".to_string()])
.unwrap();
assert_eq!(path_params, ("foo".to_string(), "bar".to_string()));
assert_eq!(
path_params.values(),
vec!["foo".to_string(), "bar".to_string()]
);
let mut path_params: (usize, String) = Default::default();
path_params
.set_values(&["1".to_string(), "foo".to_string()])
.unwrap();
assert_eq!(path_params, (1, "foo".to_string()));
assert_eq!(
path_params.values(),
vec!["1".to_string(), "foo".to_string()]
);
let mut path_params: (String, usize) = Default::default();
path_params
.set_values(&["foo".to_string(), "1".to_string()])
.unwrap();
assert_eq!(path_params, ("foo".to_string(), 1));
assert_eq!(
path_params.values(),
vec!["foo".to_string(), "1".to_string()]
);
}
}