aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorTeddy Wing2022-03-12 00:59:23 +0100
committerTeddy Wing2022-03-12 00:59:23 +0100
commit41b1d59419a18cc63386e8e246ad485a66dd603e (patch)
tree91dc7bbae19f752504ef16c22de75c8f8da54f23 /src/main.rs
parent8fc5b5f373ef7c602d3abcfb2c1bf75c7a2300b8 (diff)
downloadyaqlite-41b1d59419a18cc63386e8e246ad485a66dd603e.tar.bz2
Convert `yaml::Yaml` values to `rusqlite::ToSql`
This enables us to build a list of params for insertion and insert them into the database. Not sure if `NULL` makes sense for all of these types, but this at least gives us the type conversion necessary to get the YAML values into the SQL query, cool.
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index 0c445fe..d5849ff 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -70,7 +70,8 @@ fn yaml_extract(
)
).unwrap();
- // stmt.insert(rusqlite::params_from_iter(hash.values())).unwrap();
+ let values = hash.values().map(|v| Yaml(v));
+ stmt.insert(rusqlite::params_from_iter(values)).unwrap();
// tx.execute(
// r#"
@@ -132,3 +133,25 @@ fn get_column_names(dbconn: &rusqlite::Connection) -> HashMap<String, rusqlite::
column_names
}
+
+struct Yaml<'a>(&'a yaml::Yaml);
+
+impl<'a> rusqlite::ToSql for Yaml<'a> {
+ fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
+ use rusqlite::types::ToSqlOutput;
+
+ let sql_output = match self.0 {
+ yaml::Yaml::Real(_) => ToSqlOutput::from(self.0.as_f64().unwrap()),
+ yaml::Yaml::Integer(_) => ToSqlOutput::from(self.0.as_i64().unwrap()),
+ yaml::Yaml::String(_) => ToSqlOutput::from(self.0.as_str().unwrap()),
+ yaml::Yaml::Boolean(_) => ToSqlOutput::from(self.0.as_bool().unwrap()),
+ yaml::Yaml::Array(_) => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::Hash(_) => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::Alias(_) => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::Null => ToSqlOutput::from(rusqlite::types::Null),
+ yaml::Yaml::BadValue => ToSqlOutput::from(rusqlite::types::Null),
+ };
+
+ Ok(sql_output)
+ }
+}