pub mod build;
pub mod build_cache;
pub mod crate_resolution;
pub mod git;
pub mod prebuilt_binary;
pub mod runner;
pub mod source;
use serde::{Deserialize, Serialize};
use std::sync::mpsc;
pub use build::BuildMessage;
pub use build_cache::BuildCacheMessage;
pub use crate_resolution::CrateResolutionMessage;
pub use git::GitMessage;
pub use prebuilt_binary::PrebuiltBinaryMessage;
pub use runner::RunnerMessage;
pub use source::SourceMessage;
pub use crate::git::GitSelector;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "data", rename_all = "snake_case")]
pub enum Message {
CrateResolution(CrateResolutionMessage),
PrebuiltBinary(PrebuiltBinaryMessage),
Source(SourceMessage),
BuildCache(BuildCacheMessage),
Git(GitMessage),
Build(BuildMessage),
Runner(RunnerMessage),
}
#[derive(Clone, Debug)]
pub enum MessageReporter {
Null,
Channel(mpsc::SyncSender<Message>),
}
impl MessageReporter {
pub fn null() -> Self {
Self::Null
}
pub fn channel(sender: mpsc::SyncSender<Message>) -> Self {
Self::Channel(sender)
}
pub fn report<F, T>(&self, f: F)
where
F: FnOnce() -> T,
T: Into<Message>,
{
if let Self::Channel(sender) = self {
let msg = f().into();
let _ = sender.send(msg);
}
}
pub fn is_enabled(&self) -> bool {
matches!(self, Self::Channel(_))
}
}