rsio 0.1.0

A simple Rust IO helper library for console input
Documentation
use std::{io, str::FromStr};

/// 从标准输入读取一行字符串并返回(去除首尾空白)。
///
/// # Panics
///
/// 当无法从标准输入读取时 panic。
///
/// # Examples
///
/// ```no_run
/// let name = rsio::input();
/// println!("Hello, {}", name);
/// ```
pub fn input() -> String {
    let mut input = String::new();
    io::stdin()
        .read_line(&mut input)
        .expect("Error:输入无效或类型不匹配");
    input.trim().to_string()
}

/// 从标准输入读取一行并解析为指定数字类型。
///
/// 支持任何实现了 `FromStr` trait 的类型(如 `i32`, `f64` 等)。
///
/// # Panics
///
/// 当输入无法解析为目标类型时 panic。
///
/// # Examples
///
/// ```no_run
/// let x: i32 = rsio::input_num();
/// let y: f64 = rsio::input_num();
/// ```
pub fn input_num<F: FromStr>() -> F {
    let input_number = input();
    match input_number.parse::<F>() {
        Ok(num) => num,
        Err(_) => panic!("Error:输入无效或类型不匹配"),
    }
}

#[cfg(test)]
mod tests {
    // 注意:input() 和 input_num() 依赖标准输入,无法在常规单元测试中测试。
    // 这里仅验证模块可以正常编译和导入。
    use super::*;

    #[test]
    fn test_module_compiles() {
        // 编译期检查:确保函数可见且泛型约束正确
        let _: fn() -> String = input;
        let _: fn() -> i32 = input_num::<i32>;
    }
}