runmod/
runmod.rs

1use std::panic::Location;
2use std::fs::File;
3use std::io::{BufReader, BufRead};
4use std::fmt::Display;
5use crate::RunVar;
6use crate::RE;
7
8#[derive(Clone)]
9pub struct RunMod {
10    value: RunVar,
11    file_name: String,
12    line_number: u32,
13}
14
15impl RunMod {
16    ///Makes a new RunMod
17    /// 
18    /// This method will never panic or fail
19    /// 
20    /// # Examples
21    /// 
22    /// ```
23    /// use runmod::{RunMod, RunVar};
24    /// 
25    /// let value = RunMod::new(RunVar::I32(10));
26    /// ```
27    #[track_caller]
28    pub fn new(val: RunVar) -> Self {
29        let loc = Location::caller();
30
31        Self {
32            value: val,
33            file_name: loc.file().to_string(),
34            line_number: loc.line(),
35        }
36    }
37    
38    
39    fn extract_runvar_arg(line: &str) -> Option<String> {
40        RE.captures(line).map(|caps| caps[1].trim().to_string())
41    }
42    
43    make_runner!(get_i8, I8, i8);
44    make_runner!(get_i16, I16, i16);
45    make_runner!(get_i32, I32, i32);
46    make_runner!(get_i64, I64, i64);
47    make_runner!(get_i128, I128, i128);
48    make_runner!(get_isize, ISIZE, isize);
49    make_runner!(get_u8, U8, u8);
50    make_runner!(get_u16, U16, u16);
51    make_runner!(get_u32, U32, u32);
52    make_runner!(get_u64, U64, u64);
53    make_runner!(get_u128, U128, u128);
54    make_runner!(get_usize, USIZE, usize);
55    make_runner!(get_f32, F32, f32);
56    make_runner!(get_f64, F64, f64);
57}
58
59impl From<RunVar> for RunMod {
60    #[track_caller]
61    fn from(value: RunVar) -> Self {
62        let loc = Location::caller();
63        
64        Self {
65            value,
66            line_number: loc.line(),
67            file_name: loc.file().to_string(),
68        }
69    }
70}
71
72impl Display for RunMod {
73    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
74        write!(f, "{}", self.value)?;
75        Ok(())
76    }
77}