pub fn task(name: impl Into<String>) -> crate::Signature {
crate::Signature::new(name.into())
}
pub fn chain() -> crate::Chain {
crate::Chain::new()
}
pub fn group() -> crate::Group {
crate::Group::new()
}
pub fn chord(header: crate::Group, callback: crate::Signature) -> crate::Chord {
crate::Chord::new(header, callback)
}
pub fn chunks<T: serde::Serialize>(
task_name: impl Into<String>,
items: Vec<T>,
chunk_size: usize,
) -> crate::Chunks {
let sig = crate::Signature::new(task_name.into());
let serialized_items: Vec<serde_json::Value> = items
.into_iter()
.filter_map(|item| serde_json::to_value(item).ok())
.collect();
crate::Chunks::new(sig, serialized_items, chunk_size)
}
pub fn map<T: serde::Serialize>(task_name: impl Into<String>, items: Vec<T>) -> crate::Map {
let sig = crate::Signature::new(task_name.into());
let serialized_items: Vec<Vec<serde_json::Value>> = items
.into_iter()
.filter_map(|item| serde_json::to_value(item).ok().map(|v| vec![v]))
.collect();
crate::Map::new(sig, serialized_items)
}
pub fn starmap<T: serde::Serialize>(
task_name: impl Into<String>,
args: Vec<Vec<T>>,
) -> crate::Starmap {
let sig = crate::Signature::new(task_name.into());
let serialized_args: Vec<Vec<serde_json::Value>> = args
.into_iter()
.map(|arg_list| {
arg_list
.into_iter()
.filter_map(|item| serde_json::to_value(item).ok())
.collect()
})
.collect();
crate::Starmap::new(sig, serialized_args)
}
pub fn options() -> crate::TaskOptions {
crate::TaskOptions::default()
}
pub fn with_retry(max_retries: u32, retry_delay_secs: u64) -> crate::TaskOptions {
crate::TaskOptions {
max_retries: Some(max_retries),
countdown: Some(retry_delay_secs),
..Default::default()
}
}
pub fn with_timeout(timeout_secs: u64) -> crate::TaskOptions {
crate::TaskOptions {
time_limit: Some(timeout_secs),
..Default::default()
}
}
pub fn with_priority(priority: u8) -> crate::TaskOptions {
crate::TaskOptions {
priority: Some(priority),
..Default::default()
}
}
pub fn with_countdown(countdown_secs: u64) -> crate::TaskOptions {
crate::TaskOptions {
countdown: Some(countdown_secs),
..Default::default()
}
}
pub fn with_expires(expires_secs: u64) -> crate::TaskOptions {
crate::TaskOptions {
expires: Some(expires_secs),
..Default::default()
}
}
pub fn batch<T: serde::Serialize>(
task_name: impl Into<String>,
args_list: Vec<Vec<T>>,
) -> Vec<crate::Signature> {
let task_name = task_name.into();
args_list
.into_iter()
.map(|args| {
let sig = crate::Signature::new(task_name.clone());
let serialized_args: Vec<serde_json::Value> = args
.into_iter()
.filter_map(|arg| serde_json::to_value(arg).ok())
.collect();
sig.with_args(serialized_args)
})
.collect()
}
pub fn chain_from<T: serde::Serialize>(tasks: Vec<(&str, Vec<T>)>) -> crate::Chain {
let mut chain = crate::Chain::new();
for (task_name, args) in tasks {
let serialized_args: Vec<serde_json::Value> = args
.into_iter()
.filter_map(|arg| serde_json::to_value(arg).ok())
.collect();
chain = chain.then(task_name, serialized_args);
}
chain
}
pub fn group_from<T: serde::Serialize>(tasks: Vec<(&str, Vec<T>)>) -> crate::Group {
let mut group = crate::Group::new();
for (task_name, args) in tasks {
let serialized_args: Vec<serde_json::Value> = args
.into_iter()
.filter_map(|arg| serde_json::to_value(arg).ok())
.collect();
group = group.add(task_name, serialized_args);
}
group
}
pub fn task_with_options(
name: impl Into<String>,
args: Vec<serde_json::Value>,
max_retries: u32,
priority: u8,
) -> crate::Signature {
let mut sig = crate::Signature::new(name.into()).with_args(args);
sig.options.max_retries = Some(max_retries);
sig.options.priority = Some(priority);
sig
}
#[cfg(all(feature = "beat", feature = "beat-cron"))]
pub fn recurring(
task_name: impl Into<String>,
minute: &str,
hour: &str,
day_of_week: &str,
day_of_month: &str,
month_of_year: &str,
) -> crate::ScheduledTask {
crate::ScheduledTask::new(
task_name.into(),
crate::Schedule::crontab(minute, hour, day_of_week, day_of_month, month_of_year),
)
}
#[cfg(feature = "beat")]
pub fn recurring_interval(task_name: impl Into<String>, seconds: u64) -> crate::ScheduledTask {
crate::ScheduledTask::new(task_name.into(), crate::Schedule::interval(seconds))
}
pub fn delay(
task_name: impl Into<String>,
args: Vec<serde_json::Value>,
delay_secs: u64,
) -> crate::Signature {
let mut sig = crate::Signature::new(task_name.into()).with_args(args);
sig.options.countdown = Some(delay_secs);
sig
}
pub fn expire_in(
task_name: impl Into<String>,
args: Vec<serde_json::Value>,
expires_secs: u64,
) -> crate::Signature {
let mut sig = crate::Signature::new(task_name.into()).with_args(args);
sig.options.expires = Some(expires_secs);
sig
}
pub fn high_priority(
task_name: impl Into<String>,
args: Vec<serde_json::Value>,
) -> crate::Signature {
let mut sig = crate::Signature::new(task_name.into()).with_args(args);
sig.options.priority = Some(9);
sig
}
pub fn low_priority(
task_name: impl Into<String>,
args: Vec<serde_json::Value>,
) -> crate::Signature {
let mut sig = crate::Signature::new(task_name.into()).with_args(args);
sig.options.priority = Some(1);
sig
}
pub fn parallel() -> crate::Group {
crate::Group::new()
}
pub fn critical(task_name: impl Into<String>, args: Vec<serde_json::Value>) -> crate::Signature {
let mut sig = crate::Signature::new(task_name.into()).with_args(args);
sig.options.priority = Some(9);
sig.options.max_retries = Some(5);
sig
}
pub fn best_effort(task_name: impl Into<String>, args: Vec<serde_json::Value>) -> crate::Signature {
let mut sig = crate::Signature::new(task_name.into()).with_args(args);
sig.options.priority = Some(1);
sig.options.max_retries = Some(0);
sig
}
pub fn transient(
task_name: impl Into<String>,
args: Vec<serde_json::Value>,
ttl_secs: u64,
) -> crate::Signature {
let mut sig = crate::Signature::new(task_name.into()).with_args(args);
sig.options.expires = Some(ttl_secs);
sig
}
pub fn retry_with_backoff(max_retries: u32, initial_delay_secs: u64) -> crate::TaskOptions {
crate::TaskOptions {
max_retries: Some(max_retries),
countdown: Some(initial_delay_secs),
..Default::default()
}
}
pub fn pipeline() -> crate::Chain {
crate::Chain::new()
}
pub fn fan_out<T: serde::Serialize>(task_name: impl Into<String>, items: Vec<T>) -> crate::Map {
map(task_name, items)
}
pub fn fan_in(tasks: crate::Group, callback: crate::Signature) -> crate::Chord {
crate::Chord::new(tasks, callback)
}