diff options
| author | Teddy Wing | 2022-03-13 03:07:33 +0100 | 
|---|---|---|
| committer | Teddy Wing | 2022-03-13 03:11:31 +0100 | 
| commit | 1bc6087f179ac2213acacaa0df917c96f9540e55 (patch) | |
| tree | 5417870afb8dcdae4a5746c8666ca020fd78db9d | |
| parent | 8cd470b4be6128ac9f4df61c796e4568662be896 (diff) | |
| download | yaqlite-1bc6087f179ac2213acacaa0df917c96f9540e55.tar.bz2 | |
extract(): Remove `unwrap()`s
| -rw-r--r-- | src/lib.rs | 2 | ||||
| -rw-r--r-- | src/yaml.rs | 23 | 
2 files changed, 19 insertions, 6 deletions
| @@ -12,7 +12,7 @@ pub fn insert(      for mut doc in data {          let tx = dbconn.transaction().unwrap(); -        crate::yaml::extract(&mut doc, &tx, &table_name, &table_columns); +        crate::yaml::extract(&mut doc, &tx, &table_name, &table_columns).unwrap();          tx.commit().unwrap();      } diff --git a/src/yaml.rs b/src/yaml.rs index 9a7a517..5d54324 100644 --- a/src/yaml.rs +++ b/src/yaml.rs @@ -9,6 +9,13 @@ mod sql;  pub use sql::*; +#[derive(thiserror::Error, Debug)] +pub enum YamlError { +    #[error("SQL error")] +    Sqlite(#[from] rusqlite::Error), +} + +  // TODO: Separate functions to get a list of YAML hashes, and insert hashes into  // the database.  pub fn extract( @@ -16,11 +23,11 @@ pub fn extract(      tx: &rusqlite::Transaction,      table_name: &str,      table_columns: &HashMap<String, crate::sqlite::Zero>, -) { +) -> Result<(), YamlError> {      match doc {          yaml::Yaml::Array(ref mut array) => {              for yaml_value in array { -                extract(yaml_value, tx, table_name, table_columns); +                extract(yaml_value, tx, table_name, table_columns)?;              }          }          yaml::Yaml::Hash(ref mut hash) => { @@ -47,17 +54,23 @@ pub fn extract(                      // Wrap column names in quotes.                      hash.keys() -                        .map(|k| format!(r#""{}""#, k.as_str().unwrap())) +                        .map(|k| k.as_str()) +                        .filter(|k| k.is_some()) + +                        // Always `Some`. +                        .map(|k| format!(r#""{}""#, k.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(); +            stmt.insert(rusqlite::params_from_iter(values))?;          }          _ => {}      } + +    Ok(())  } | 
