aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2022-03-12 21:56:23 +0100
committerTeddy Wing2022-03-12 21:56:23 +0100
commit2388395752fbd56b8e1213ff60ccb2a40d23c806 (patch)
tree2fee0b8590728376e941e9b5969513919f2d699e
parentf4d5d7ee9897ed59cf83313774d160c832c091f3 (diff)
downloadyaqlite-2388395752fbd56b8e1213ff60ccb2a40d23c806.tar.bz2
Move `yaml_extract()` to `yaqlite::yaml::extract()`
-rw-r--r--src/main.rs52
-rw-r--r--src/yaml.rs55
2 files changed, 56 insertions, 51 deletions
diff --git a/src/main.rs b/src/main.rs
index b212c46..424c4ba 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,8 +1,6 @@
use rusqlite;
use yaml_rust::yaml;
-use std::collections::HashMap;
-
fn main() {
println!("Hello, world!");
@@ -21,7 +19,7 @@ fn main() {
for mut doc in &mut yaml_data {
let tx = dbconn.transaction().unwrap();
- yaml_extract(&mut doc, &tx, &table_columns);
+ yaqlite::yaml::extract(&mut doc, &tx, &table_columns);
tx.commit().unwrap();
}
@@ -30,51 +28,3 @@ fn main() {
dbconn.close().unwrap();
}
-
-fn yaml_extract(
- doc: &mut yaml::Yaml,
- tx: &rusqlite::Transaction,
- table_columns: &HashMap<String, yaqlite::sqlite::Zero>,
-) {
- match doc {
- yaml::Yaml::Array(ref mut array) => {
- for yaml_value in array {
- yaml_extract(yaml_value, tx, table_columns);
- }
- }
- yaml::Yaml::Hash(ref mut hash) => {
- let keys: Vec<yaml::Yaml> = hash.keys().map(|k| k.clone()).collect();
- let columns_as_yaml: Vec<yaml::Yaml> = table_columns.keys()
- .map(|c| yaml::Yaml::from_str(c))
- .collect();
-
- for key in keys.iter() {
- if !columns_as_yaml.contains(key) {
- hash.remove(key);
- }
- }
-
- let mut stmt = tx.prepare(
- &format!(
- r#"
- INSERT INTO "people"
- ({})
- VALUES
- ({});
- "#,
- // Wrap column names in quotes.
- hash.keys()
- .map(|k| format!(r#""{}""#, k.as_str().unwrap()))
- .collect::<Vec<String>>()
- .join(", "),
- // TODO: get len "?"s
- format!("{}?", "?, ".repeat(hash.len() - 1)),
- )
- ).unwrap();
-
- let values = hash.values().map(|v| yaqlite::yaml::Yaml(v));
- stmt.insert(rusqlite::params_from_iter(values)).unwrap();
- }
- _ => {}
- }
-}
diff --git a/src/yaml.rs b/src/yaml.rs
index 2da8dc3..532658a 100644
--- a/src/yaml.rs
+++ b/src/yaml.rs
@@ -1,3 +1,58 @@
+use rusqlite;
+use yaml_rust::yaml;
+
+use std::collections::HashMap;
+
+
mod sql;
pub use sql::*;
+
+
+pub fn extract(
+ doc: &mut yaml::Yaml,
+ tx: &rusqlite::Transaction,
+ table_columns: &HashMap<String, crate::sqlite::Zero>,
+) {
+ match doc {
+ yaml::Yaml::Array(ref mut array) => {
+ for yaml_value in array {
+ extract(yaml_value, tx, table_columns);
+ }
+ }
+ yaml::Yaml::Hash(ref mut hash) => {
+ let keys: Vec<yaml::Yaml> = hash.keys().map(|k| k.clone()).collect();
+ let columns_as_yaml: Vec<yaml::Yaml> = table_columns.keys()
+ .map(|c| yaml::Yaml::from_str(c))
+ .collect();
+
+ for key in keys.iter() {
+ if !columns_as_yaml.contains(key) {
+ hash.remove(key);
+ }
+ }
+
+ let mut stmt = tx.prepare(
+ &format!(
+ r#"
+ INSERT INTO "people"
+ ({})
+ VALUES
+ ({});
+ "#,
+ // Wrap column names in quotes.
+ hash.keys()
+ .map(|k| format!(r#""{}""#, k.as_str().unwrap()))
+ .collect::<Vec<String>>()
+ .join(", "),
+ // TODO: get len "?"s
+ format!("{}?", "?, ".repeat(hash.len() - 1)),
+ )
+ ).unwrap();
+
+ let values = hash.values().map(|v| Yaml(v));
+ stmt.insert(rusqlite::params_from_iter(values)).unwrap();
+ }
+ _ => {}
+ }
+}