rust_sql_organizer/sql_file/
mod.rs1use std::{fs, path::Path};
2
3pub mod error;
4use error::Error;
5
6#[derive(Debug, Clone)]
7pub struct SqlFile {
8 file_name: String,
9 sql_text: String,
10}
11
12impl SqlFile {
13 pub fn new(path: &Path) -> Result<SqlFile, Error> {
14 let file_name = path
15 .file_stem()
16 .expect("No file stem was found")
17 .to_str()
18 .expect("File name is empty!")
19 .to_string();
20 let sql_text = fs::read_to_string(path)?;
21 Ok(SqlFile {
22 file_name,
23 sql_text,
24 })
25 }
26
27 #[cfg(test)]
28 pub fn test_new(file_name: &str, sql_text: &str) -> SqlFile {
29 SqlFile {
30 file_name: file_name.to_string(),
31 sql_text: sql_text.to_string(),
32 }
33 }
34
35 pub fn get_file_name(&self) -> &str {
36 self.file_name.as_str()
37 }
38
39 pub fn get_sql_text(&self) -> &str {
40 self.sql_text.as_str()
41 }
42}
43
44#[cfg(test)]
45mod test_sql_file {
46 use std::path::Path;
47 #[cfg(test)]
48 use std::path::PathBuf;
49
50 #[cfg(test)]
51 use tempdir::TempDir;
52
53 use super::SqlFile;
54 use std::fs::File;
55 use std::io::Write;
56
57 #[cfg(test)]
58 fn create_temp_file(prefix: &str, file_name: &str) -> (TempDir, PathBuf) {
59 let tmp_dir = TempDir::new(prefix).unwrap();
60 let file_path = tmp_dir.path().join(Path::new(file_name));
61 let mut file = File::create(&file_path).unwrap();
62 writeln!(file, "SELECT 1;").unwrap();
63 (tmp_dir, file_path)
64 }
65
66 #[test]
67 fn test_sql_file() {
68 let (tmp_dir, file) = create_temp_file("test_sql_file", "test.sql");
69 let result = SqlFile::new(&file);
70 assert!(result.is_ok());
71 let sql_file = result.unwrap();
72 assert_eq!(sql_file.get_file_name(), "test");
73 assert_eq!(sql_file.get_sql_text().trim(), "SELECT 1;");
74 drop(tmp_dir);
75 }
76
77 #[test]
78 fn test_sql_file_error() {
79 let result = SqlFile::new(Path::new("not_exists.sql"));
80 assert!(result.is_err())
81 }
82}