diff --git a/deepseek-recipe/src/protocol/json_schema.rs b/deepseek-recipe/src/protocol/json_schema.rs index f00a97d..caadb87 100644 --- a/deepseek-recipe/src/protocol/json_schema.rs +++ b/deepseek-recipe/src/protocol/json_schema.rs @@ -75,7 +75,7 @@ pub(crate) enum JsonSchemaType { #[serde(skip_serializing_if = "Option::is_none")] pattern: Option, #[serde(skip_serializing_if = "Option::is_none")] - format: Option, + format: Option, #[serde(skip_serializing_if = "Option::is_none")] r#enum: Option>, }, @@ -135,17 +135,6 @@ pub(crate) enum JsonSchemaType { }, } -/// A `format` keyword value retained for a string schema. -#[derive(Debug, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub(crate) enum StringFormat { - Email, - Hostname, - Ipv4, - Ipv6, - Uuid, -} - impl JsonSchema { /// Normalize every object in the schema for strict decoding. /// @@ -364,3 +353,23 @@ mod tests { ); } } + +#[cfg(test)] +mod contribution_regression { + use super::*; + + #[test] + fn string_formats_are_not_limited_to_a_small_enum() { + for format in [ + "date-time", + "date", + "time", + "uri", + "duration", + "custom-format", + ] { + let result = normalize_strict_schema(serde_json::json!({"type":"object","properties":{"value":{"type":"string","format":format}}}), true, |e|e.to_string(), "root").unwrap(); + assert_eq!(result["properties"]["value"]["format"], format); + } + } +}