aqueiralibrary/
lib.rs

1pub mod errors;
2use std::io;
3use std::str::FromStr;
4use errors::Errors;
5
6pub fn input() -> Result<String, Errors> {
7    let mut buffer = String::new();
8    io::stdin().read_line(&mut buffer).map_err(|e|{
9        Errors::error("Ошибка ввода пользователя", e)
10    })?;
11    Ok(buffer.trim().to_string())
12}
13pub trait ParseInput<T> {
14    fn parsing(&self) -> Result<T, Errors>;
15}
16
17impl<T> ParseInput<T> for String
18    where
19        T: FromStr,
20        T::Err: std::fmt::Display,
21{
22    fn parsing(&self) -> Result<T, Errors> {
23        self.parse::<T>().map_err(|e| {
24            Errors::error("Ошибка парсинга", e)
25        })
26    }
27
28}
29
30impl<'a, T> ParseInput<T> for &'a str
31    where
32        T: FromStr,
33        T::Err: std::fmt::Display,
34{
35    fn parsing(&self) -> Result<T, Errors> {
36        self.parse::<T>().map_err(|e| {
37            Errors::error("Ошибка парсинга", e)
38        })
39    }
40}