lot of refactor

This commit is contained in:
2026-03-14 19:21:56 +01:00
parent b63982714b
commit 8d4a002b73
22 changed files with 256 additions and 313 deletions
+50
View File
@@ -0,0 +1,50 @@
use async_nats::Client;
use async_trait::async_trait;
use postcard::{from_bytes, to_stdvec};
use types::{
error::{CorroError, CorroErrorType},
jobs::{JobResponse, JobsMap, JobsResponseMap},
};
#[async_trait]
pub trait JobClient {
async fn send_job(&self, job: JobsMap) -> Result<JobsResponseMap, CorroError>;
}
#[async_trait]
impl JobClient for Client {
async fn send_job(&self, job: JobsMap) -> Result<JobsResponseMap, CorroError> {
let subject = match &job {
JobsMap::Download(_job) => "download",
JobsMap::Play(_job) => "play",
JobsMap::Search(_job) => "search",
};
match self
.request(
format!("corro-dj.{subject}"),
to_stdvec(&job).unwrap().into(),
)
.await
{
Ok(response) => {
let parsed: JobResponse = from_bytes(&response.payload).unwrap();
if let Some(error) = parsed.error {
Err(error)
} else if let Some(content) = parsed.content {
Ok(content)
} else {
Err(CorroError {
error_type: CorroErrorType::ParseError,
message: "Unknown payload".to_owned(),
})
}
}
Err(why) => Err(CorroError {
error_type: CorroErrorType::NatsError,
message: why.to_string(),
}),
}
}
}
+1
View File
@@ -0,0 +1 @@
pub mod functions;