use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PullRequest {
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub insecure: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
stream: Option<bool>,
}
impl PullRequest {
pub fn new<M: Into<String>>(model: M) -> Self {
Self {
model: model.into(),
insecure: None,
stream: Some(false), }
}
pub fn with_insecure(mut self, insecure: bool) -> Self {
self.insecure = Some(insecure);
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_new_creates_request_with_model() {
let request = PullRequest::new("llama3.2:latest");
assert_eq!(request.model, "llama3.2:latest");
assert_eq!(request.insecure, None);
}
#[test]
fn test_with_insecure_sets_flag() {
let request = PullRequest::new("llama3.2:latest").with_insecure(true);
assert_eq!(request.insecure, Some(true));
}
#[test]
fn test_serialization_minimal() {
let request = PullRequest::new("llama3.2:latest");
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json["model"], "llama3.2:latest");
assert_eq!(json["stream"], false);
assert!(json.get("insecure").is_none());
}
#[test]
fn test_serialization_full() {
let request = PullRequest::new("llama3.2:latest").with_insecure(true);
let json = serde_json::to_value(&request).unwrap();
assert_eq!(json["model"], "llama3.2:latest");
assert_eq!(json["insecure"], true);
assert_eq!(json["stream"], false);
}
#[test]
fn test_deserialization() {
let json = r#"{"model": "llama3.2:latest", "insecure": false}"#;
let request: PullRequest = serde_json::from_str(json).unwrap();
assert_eq!(request.model, "llama3.2:latest");
assert_eq!(request.insecure, Some(false));
}
}