From 87d25880f6dbe0ba432035cc8cdf1b6051292983 Mon Sep 17 00:00:00 2001 From: mykola2312 Date: Mon, 19 Feb 2024 12:48:10 +0200 Subject: [PATCH] implement async process spawning --- src/dl.rs | 1 + src/dl/spawn.rs | 25 +++++++++++++++++++++++++ src/dl/yt_dlp.rs | 14 ++++++++------ 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 src/dl/spawn.rs diff --git a/src/dl.rs b/src/dl.rs index e91fcfd..ce4caca 100644 --- a/src/dl.rs +++ b/src/dl.rs @@ -1 +1,2 @@ +pub mod spawn; pub mod yt_dlp; diff --git a/src/dl/spawn.rs b/src/dl/spawn.rs new file mode 100644 index 0000000..61fd76f --- /dev/null +++ b/src/dl/spawn.rs @@ -0,0 +1,25 @@ +use std::process::{Command, Output}; +use tokio::task::{spawn_blocking, JoinError}; + +pub enum SpawnError { + CommandError(std::io::Error), + SpawnBlockingError(JoinError) +} + +pub async fn spawn_process(program: String, args: Vec) -> Result { + let output = spawn_blocking(move || { + let output = Command::new(program) + .args(args) + .output(); + + match output { + Ok(output) => Ok(output), + Err(e) => Err(SpawnError::CommandError(e)) + } + }).await; + + match output { + Ok(output) => output, + Err(e) => Err(SpawnError::SpawnBlockingError(e)) + } +} diff --git a/src/dl/yt_dlp.rs b/src/dl/yt_dlp.rs index 2e2e399..633a5b5 100644 --- a/src/dl/yt_dlp.rs +++ b/src/dl/yt_dlp.rs @@ -13,20 +13,22 @@ pub struct YtDlpFormat { pub vcodec: Option, pub acodec: Option, pub abr: Option, - pub vbr: Option + pub vbr: Option, } #[derive(Deserialize, Debug)] pub struct YtDlpInfo { pub id: String, pub title: String, - pub formats: Vec + pub formats: Vec, +} + +enum YtDlpError { + SpawnError, } pub struct YtDlp {} impl YtDlp { - pub fn load_info(url: &str) { - - } -} \ No newline at end of file + pub async fn load_info(url: &str) {} +}