1use crate::{ejsocket_message::EjSocketClientMessage, prelude::*};
26use std::{collections::HashMap, fmt, path::Path, time::Duration};
27use tokio::{
28 io::{AsyncBufReadExt, AsyncWriteExt, BufReader, Lines},
29 net::UnixStream,
30};
31use tracing::{error, info};
32use uuid::Uuid;
33
34pub use crate::{
35 build::dispatch_build,
36 ejjob::{
37 EjBuildResult, EjDeployableJob, EjJob, EjJobCancelReason, EjJobType, EjJobUpdate,
38 EjRunResult,
39 },
40 fetch_jobs::fetch_jobs,
41 fetch_run_result::fetch_run_result,
42 run::dispatch_run,
43};
44
45pub mod build;
46pub mod ejbuilder;
47pub mod ejclient;
48pub mod ejjob;
49pub mod ejsocket_message;
50pub mod ejws_message;
51pub mod error;
52pub mod fetch_jobs;
53pub mod fetch_run_result;
54pub mod prelude;
55pub mod run;
56mod socket;
57
58async fn dispatch(stream: &mut UnixStream, job: EjJob, max_duration: Duration) -> Result<()> {
69 let message = EjSocketClientMessage::Dispatch {
70 job,
71 timeout: max_duration,
72 };
73
74 let payload = serde_json::to_string(&message)?;
75 stream.write_all(payload.as_bytes()).await;
76 stream.write_all(b"\n").await;
77 stream.flush().await;
78 Ok(())
79}