use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, JsonSchema, Serialize)]
pub struct FsQuery {
pub path: String,
#[serde(default)]
pub mode: Option<String>,
}
#[derive(Debug, Default, Deserialize, JsonSchema, Serialize)]
pub struct FileReadQuery {
pub path: String,
#[serde(default)]
pub start_line: Option<u64>,
#[serde(default)]
pub end_line: Option<u64>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn an_fs_query_without_a_mode_deserializes_and_keeps_the_mode_a_string() {
let query: FsQuery = serde_json::from_str(r#"{"path":"/tmp/f"}"#).expect("deserializes");
assert_eq!(query.path, "/tmp/f");
assert!(query.mode.is_none());
let with_mode: FsQuery =
serde_json::from_str(r#"{"path":"/tmp/f","mode":"0644"}"#).expect("deserializes");
assert_eq!(with_mode.mode.as_deref(), Some("0644"));
}
#[test]
fn a_file_read_query_without_a_range_leaves_both_bounds_absent() {
let query: FileReadQuery =
serde_json::from_str(r#"{"path":"/tmp/f"}"#).expect("deserializes");
assert_eq!(query.path, "/tmp/f");
assert!(query.start_line.is_none());
assert!(query.end_line.is_none());
let ranged: FileReadQuery =
serde_json::from_str(r#"{"path":"/tmp/f","start_line":3,"end_line":9}"#)
.expect("deserializes");
assert_eq!(ranged.start_line, Some(3));
assert_eq!(ranged.end_line, Some(9));
}
}