use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct FileExcerpt {
pub path: String,
pub line: Option<u32>,
pub kind: String,
pub body: String,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SpecDerivationInput {
pub finding_id: String,
pub run_id: String,
pub cap: String,
pub lang: String,
pub callee: String,
pub excerpts: Vec<FileExcerpt>,
}
pub const SPEC_DERIVATION_PROMPT_VERSION: &str = "phase15.spec_derivation.v1";
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn input_roundtrips_through_serde() {
let inp = SpecDerivationInput {
finding_id: "f-1".into(),
run_id: "r-1".into(),
cap: "SQL_QUERY".into(),
lang: "python".into(),
callee: "cursor.execute".into(),
excerpts: vec![FileExcerpt {
path: "sink.py".into(),
line: Some(19),
kind: "sink".into(),
body: "cursor.execute(query)".into(),
}],
};
let s = serde_json::to_string(&inp).unwrap();
let back: SpecDerivationInput = serde_json::from_str(&s).unwrap();
assert_eq!(inp, back);
}
}