1#[derive(Debug)]
5pub struct Source<'a> {
6 pub filename: &'a str,
8 pub code: String,
10}
11
12impl<'a> Source<'a> {
13 pub fn new(filename: &'a str) -> Result<Self, std::io::Error> {
15 let code = std::fs::read_to_string(filename)?;
16 Ok(Source { filename, code })
17 }
18
19 pub fn from_str(filename: &'a str, code: &'a str) -> Self {
21 Source {
22 filename,
23 code: code.to_string(),
24 }
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn test_source_new() {
34 let filename = "test_file.txt";
35 let code = "fn main() { println!(\"Hello, world!\"); }";
36 std::fs::write(filename, code).unwrap();
37
38 let source = Source::new(filename).unwrap();
39 assert_eq!(source.filename, filename);
40 assert_eq!(source.code, code);
41
42 std::fs::remove_file(filename).unwrap();
43 }
44
45 #[test]
46 fn test_source_from_str() {
47 let filename = "test_file.txt";
48 let code = "fn main() { println!(\"Hello, world!\"); }";
49 let source = Source::from_str(filename, code);
50
51 assert_eq!(source.filename, filename);
52 assert_eq!(source.code, code);
53 }
54}