feat: improve list_scripts to return actual Vec<(Uuid, Script)>
This commit is contained in:
parent
85a51d74ea
commit
f535df6da4
61
src/db.rs
61
src/db.rs
@ -1,7 +1,7 @@
|
|||||||
use sqlx::{SqlitePool, migrate::Migrator};
|
use sqlx::{SqlitePool, migrate::Migrator, prelude::FromRow};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::script::Script;
|
use crate::script::{Parameter, Script};
|
||||||
|
|
||||||
static MIGRATOR: Migrator = sqlx::migrate!("./migrations");
|
static MIGRATOR: Migrator = sqlx::migrate!("./migrations");
|
||||||
|
|
||||||
@ -49,26 +49,51 @@ pub async fn add_script(pool: &SqlitePool, script: &Script) -> Result<(), String
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(FromRow, Debug)]
|
||||||
|
struct ScriptRow {
|
||||||
|
id: String,
|
||||||
|
name: String,
|
||||||
|
path: String,
|
||||||
|
parameters: String,
|
||||||
|
default_parameter_set: Option<String>,
|
||||||
|
help_uri: Option<String>,
|
||||||
|
supports_paging: Option<String>,
|
||||||
|
supports_should_process: Option<bool>,
|
||||||
|
positional_binding: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Return Vec<Script> instead of String-Tuple
|
// TODO: Return Vec<Script> instead of String-Tuple
|
||||||
// TODO: Add Custom Error Type
|
// TODO: Add Custom Error Type
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub async fn list_scripts(pool: &SqlitePool) -> Result<Vec<(String, String)>, String> {
|
pub async fn list_scripts(pool: &SqlitePool) -> Result<Vec<(Uuid, Script)>, String> {
|
||||||
struct Payload {
|
sqlx::query_as::<_, ScriptRow>("SELECT id, name, path, parameters, default_parameter_set, help_uri, supports_paging, supports_should_process, positional_binding FROM scripts")
|
||||||
pub name: String,
|
|
||||||
pub path: String,
|
|
||||||
}
|
|
||||||
sqlx::query_as!(Payload, r#"SELECT name, path FROM scripts"#)
|
|
||||||
.fetch_all(pool)
|
.fetch_all(pool)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| e.to_string())
|
.map_err(|e| e.to_string())?
|
||||||
.map(|v| {
|
.into_iter()
|
||||||
Ok(v.into_iter()
|
.map(|row| {
|
||||||
.map(|i| (i.name, i.path))
|
let params: Vec<Parameter> =
|
||||||
.collect::<Vec<(String, String)>>())
|
serde_json::from_str(&row.parameters).map_err(|e| e.to_string())?;
|
||||||
})?
|
Ok((
|
||||||
|
Uuid::parse_str(&row.id).map_err(|e| e.to_string())?,
|
||||||
|
Script::builder()
|
||||||
|
.set_name(row.name)
|
||||||
|
.set_path(row.path)
|
||||||
|
.set_parameters(params)
|
||||||
|
.set_default_parameter_set(row.default_parameter_set)
|
||||||
|
.set_help_uri(row.help_uri)
|
||||||
|
.set_supports_paging(row.supports_paging)
|
||||||
|
.set_supports_should_process(row.supports_should_process)
|
||||||
|
.set_positional_binding(row.positional_binding)
|
||||||
|
.build()
|
||||||
|
.map_err(|e| e.to_string())?,
|
||||||
|
))
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
mod test {
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
#![allow(unused_imports, clippy::unwrap_used, clippy::expect_used)]
|
#![allow(unused_imports, clippy::unwrap_used, clippy::expect_used)]
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
@ -88,13 +113,11 @@ mod test {
|
|||||||
|
|
||||||
assert!(add_script(&pool, &script).await.is_ok());
|
assert!(add_script(&pool, &script).await.is_ok());
|
||||||
|
|
||||||
let want = (script.name(), script.path());
|
|
||||||
|
|
||||||
let got = list_scripts(&pool).await.unwrap();
|
let got = list_scripts(&pool).await.unwrap();
|
||||||
|
|
||||||
assert_eq!(got.len(), 1);
|
assert_eq!(got.len(), 1);
|
||||||
assert_eq!(got[0].0, want.0);
|
assert_eq!(got[0].1.name(), "test-script.ps1");
|
||||||
assert_eq!(got[0].1, want.1);
|
assert_eq!(got[0].1.parameters().len(), 9);
|
||||||
std::fs::remove_file(&db_path).unwrap();
|
std::fs::remove_file(&db_path).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use builder::Builder;
|
|
||||||
use parameter::Parameter;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
mod builder;
|
mod builder;
|
||||||
mod parameter;
|
mod parameter;
|
||||||
|
|
||||||
|
pub use builder::Builder;
|
||||||
|
pub use parameter::Parameter;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
|
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
|
||||||
pub struct Script {
|
pub struct Script {
|
||||||
name: Arc<str>,
|
name: Arc<str>,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user