simplify experimental enum variant support

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Charles Cunningham
2026-03-08 12:10:00 -07:00
parent 7a52aee7db
commit e426c16139
3 changed files with 1 additions and 32 deletions

View File

@@ -30,8 +30,6 @@ pub enum ExperimentalEnumVariantEncoding {
StringLiteral,
/// A tagged object arm, such as `{ "type": "chatgptAuthTokens", ... }`.
TaggedObject { tag_name: &'static str },
/// An externally tagged object arm, such as `{ "reject": { ... } }`.
ExternallyTaggedObject,
}
/// Describes an experimental enum variant on a specific type.

View File

@@ -880,9 +880,6 @@ fn ts_union_arm_matches_experimental_enum_variant(
ExperimentalEnumVariantEncoding::TaggedObject { tag_name } => {
ts_object_arm_has_string_property(arm, tag_name, variant.serialized_name)
}
ExperimentalEnumVariantEncoding::ExternallyTaggedObject => {
ts_object_arm_has_property(arm, variant.serialized_name)
}
}
}
@@ -905,17 +902,6 @@ fn ts_object_arm_has_string_property(arm: &str, property_name: &str, property_va
false
}
fn ts_object_arm_has_property(arm: &str, property_name: &str) -> bool {
let Some((open, close)) = find_top_level_brace_span(arm) else {
return false;
};
let inner = &arm[open + 1..close];
split_top_level(inner, ',').into_iter().any(|field| {
let field = strip_leading_block_comments(field.as_str());
parse_property_name(field).is_some_and(|name| name == property_name)
})
}
fn json_schema_matches_experimental_enum_variant(
schema: &Value,
variant: &ExperimentalEnumVariant,
@@ -927,9 +913,6 @@ fn json_schema_matches_experimental_enum_variant(
ExperimentalEnumVariantEncoding::TaggedObject { tag_name } => {
json_schema_has_tagged_variant(schema, tag_name, variant.serialized_name)
}
ExperimentalEnumVariantEncoding::ExternallyTaggedObject => {
json_schema_has_property(schema, variant.serialized_name)
}
}
}
@@ -957,16 +940,6 @@ fn json_schema_has_tagged_variant(schema: &Value, tag_name: &str, tag_value: &st
.is_some_and(|tag_schema| json_schema_matches_string_literal(tag_schema, tag_value))
}
fn json_schema_has_property(schema: &Value, property_name: &str) -> bool {
let Value::Object(map) = schema else {
return false;
};
let Some(properties) = map.get("properties").and_then(Value::as_object) else {
return false;
};
properties.contains_key(property_name)
}
fn strip_leading_block_comments(input: &str) -> &str {
let mut rest = input.trim_start();
loop {

View File

@@ -262,9 +262,7 @@ fn experimental_enum_variant_registration(
crate::experimental_api::ExperimentalEnumVariantEncoding::StringLiteral
}
} else {
quote! {
crate::experimental_api::ExperimentalEnumVariantEncoding::ExternallyTaggedObject
}
return None;
};
Some(quote! {