use std::collections::HashMap;
use boson_core::{Job, Run, TaskConfig};
use chrono::{DateTime, Utc};
use crate::error::lock_err;
#[derive(Debug, Clone)]
pub struct LeaseRecord {
pub job_id: String,
pub expires_at: DateTime<Utc>,
}
#[derive(Debug, Default)]
pub struct Inner {
pub jobs: HashMap<String, Job>,
pub runs: HashMap<String, Run>,
pub task_configs: HashMap<String, TaskConfig>,
pub leases: HashMap<String, LeaseRecord>,
}
impl Inner {
pub fn new() -> Self {
Self::default()
}
}
pub fn read<T, R>(
lock: &std::sync::RwLock<T>,
f: impl FnOnce(&T) -> R,
) -> boson_core::Result<R> {
let guard = lock.read().map_err(|_| lock_err())?;
Ok(f(&guard))
}
pub fn write<T, R>(
lock: &std::sync::RwLock<T>,
f: impl FnOnce(&mut T) -> R,
) -> boson_core::Result<R> {
let mut guard = lock.write().map_err(|_| lock_err())?;
Ok(f(&mut guard))
}
pub fn write_fallible<T, R>(
lock: &std::sync::RwLock<T>,
f: impl FnOnce(&mut T) -> boson_core::Result<R>,
) -> boson_core::Result<R> {
let mut guard = lock.write().map_err(|_| lock_err())?;
f(&mut guard)
}