sql_fun_core/args/
impl_metadata.rs1use std::path::{Path, PathBuf};
2
3use crate::SqlFunArgsError;
4
5impl super::SqlFunArgs {
6 #[must_use]
8 pub fn metadata_format(&self) -> &str {
9 self.metadata_args.metadata_format()
10 }
11
12 pub fn metadata_file_raw(&self) -> Result<&str, SqlFunArgsError> {
18 self.metadata_args.metadata_file_raw()
19 }
20
21 pub fn metadata_file(&self) -> Result<PathBuf, SqlFunArgsError> {
27 self.metadata_args.metadata_file()
28 }
29
30 pub fn schema_file(&self, metadata_file: &Path) -> Result<PathBuf, SqlFunArgsError> {
36 self.metadata_args.schema_file(metadata_file)
37 }
38}
39
40#[cfg(test)]
41mod test_metadata {
42 use std::str::FromStr;
43
44 use clap::{Parser, builder::OsStr};
45 use testresult::TestResult;
46
47 use crate::{SqlDialect, SqlFunArgs, SqlFunMetadata, metadata::EngineVersion};
48
49 #[test]
50 pub fn test_metadata_format() -> TestResult {
51 let args = SqlFunArgs::try_parse_from(vec![
52 "sqlfun",
53 "--sql-fun-home",
54 "../sql-fun-home",
55 "subcmd",
56 ])?;
57 let metadata_format = args.metadata_format();
58 assert_eq!(metadata_format, "TOML");
59 Ok(())
60 }
61
62 #[test]
63 pub fn test_metadata_file_raw() -> TestResult {
64 let args = SqlFunArgs::try_parse_from(vec![
65 "sqlfun",
66 "--sql-fun-home",
67 "../sql-fun-home",
68 "subcmd",
69 ])?;
70 let metadata_file_raw = args.metadata_file_raw()?;
71 assert_eq!(metadata_file_raw, "Cargo.toml");
72 Ok(())
73 }
74
75 #[test]
76 pub fn test_metadata_file() -> TestResult {
77 let args = SqlFunArgs::try_parse_from(vec![
78 "sqlfun",
79 "--sql-fun-home",
80 "../sql-fun-home",
81 "subcmd",
82 ])?;
83 let metadata_file = args.metadata_file()?;
84 assert_eq!(
85 metadata_file.parent().unwrap().file_stem().unwrap(),
86 OsStr::from("sql-fun-core")
87 );
88 Ok(())
89 }
90
91 #[test]
92 pub fn test_metadata_file_load() -> TestResult {
93 let args = SqlFunArgs::try_parse_from(vec![
94 "sqlfun",
95 "--sql-fun-home",
96 "../sql-fun-home",
97 "--metadata-file",
98 "test-assets/metadata.toml",
99 "subcmd",
100 ])?;
101 let metadata_file = args.metadata_file()?;
102 let metadata = SqlFunMetadata::load_from(metadata_file)?;
103 let sql_dialect = metadata.sql_dialect();
104 assert_eq!(sql_dialect, SqlDialect::PostgreSQL);
105 let engine_version = metadata.engine_version();
106 assert_eq!(engine_version, &Some(EngineVersion::from_str("17")?));
107
108 Ok(())
109 }
110}