use crate::identity::ActorId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskSpec {
pub id: String,
pub prompt: String,
pub adapter: String,
pub author: ActorId,
#[serde(default = "default_base_ref")]
pub base_ref: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
}
fn default_base_ref() -> String {
"HEAD".to_string()
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum TaskKind {
Author,
Review,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn base_ref_defaults_to_head() {
let spec: TaskSpec = toml::from_str(
r#"
id = "t1"
prompt = "do the thing"
adapter = "example"
author = "archon"
"#,
)
.expect("valid task spec");
assert_eq!(spec.base_ref, "HEAD");
assert!(spec.model.is_none());
}
}