(&mut self, type_name: &str)
| 700 | } |
| 701 | |
| 702 | fn schema_ref(&mut self, type_name: &str) -> Result<Value> { |
| 703 | let normalized = normalize_type_name(type_name); |
| 704 | if let Some(schema) = builtin_type_schema(&normalized) { |
| 705 | return Ok(schema); |
| 706 | } |
| 707 | |
| 708 | if let Some(message) = self.registry.message(&normalized) { |
| 709 | if message.is_map_entry { |
| 710 | bail!( |
| 711 | "map entry type {} cannot be referenced directly", |
| 712 | normalized |
| 713 | ); |
| 714 | } |
| 715 | self.ensure_message_generated(&normalized)?; |
| 716 | return Ok(json!({ |
| 717 | "$ref": format!("#/components/schemas/{}", schema_key(&normalized)) |
| 718 | })); |
| 719 | } |
| 720 | |
| 721 | if self.registry.enumeration(&normalized).is_some() { |
| 722 | self.ensure_enum_generated(&normalized)?; |
| 723 | return Ok(json!({ |
| 724 | "$ref": format!("#/components/schemas/{}", schema_key(&normalized)) |
| 725 | })); |
| 726 | } |
| 727 | |
| 728 | bail!("unknown type referenced in proto: {}", normalized); |
| 729 | } |
| 730 | |
| 731 | fn ensure_message_generated(&mut self, name: &str) -> Result<()> { |
| 732 | if self.generated.contains_key(&schema_key(name)) { |
no test coverage detected