MCPcopy Create free account
hub / github.com/Dstack-TEE/dstack / ensure_message_generated

Method ensure_message_generated

ra-rpc/src/openapi.rs:731–777  ·  view source on GitHub ↗
(&mut self, name: &str)

Source from the content-addressed store, hash-verified

729 }
730
731 fn ensure_message_generated(&mut self, name: &str) -> Result<()> {
732 if self.generated.contains_key(&schema_key(name)) {
733 return Ok(());
734 }
735 if !self.visited.insert(name.to_string()) {
736 bail!("cyclic reference detected while processing {}", name);
737 }
738 let descriptor = self
739 .registry
740 .message(name)
741 .ok_or_else(|| anyhow!("message {} not found", name))?;
742
743 let mut required = Vec::new();
744 let mut props = BTreeMap::new();
745 for field in &descriptor.descriptor.field {
746 let field_name = field.name.clone().unwrap_or_default();
747 let mut schema = self.field_schema(field)?;
748 if let Some(doc) = descriptor.field_comments.get(&field_name) {
749 apply_schema_description(&mut schema, doc);
750 }
751 if is_required_field(field) {
752 required.push(field_name.clone());
753 }
754 props.insert(field_name, schema);
755 }
756
757 let mut obj = Map::new();
758 obj.insert("type".into(), Value::String("object".into()));
759 let mut properties = Map::new();
760 for (k, v) in props {
761 properties.insert(k, v);
762 }
763 obj.insert("properties".into(), Value::Object(properties));
764 if let Some(doc) = &descriptor.description {
765 obj.insert("description".into(), Value::String(doc.clone()));
766 }
767 if !required.is_empty() {
768 obj.insert(
769 "required".into(),
770 Value::Array(required.into_iter().map(Value::String).collect()),
771 );
772 }
773
774 self.generated.insert(schema_key(name), Value::Object(obj));
775 self.visited.remove(name);
776 Ok(())
777 }
778
779 fn ensure_enum_generated(&mut self, name: &str) -> Result<()> {
780 if self.generated.contains_key(&schema_key(name)) {

Callers 1

schema_refMethod · 0.80

Calls 10

schema_keyFunction · 0.85
apply_schema_descriptionFunction · 0.85
is_required_fieldFunction · 0.85
messageMethod · 0.80
cloneMethod · 0.80
field_schemaMethod · 0.80
into_iterMethod · 0.80
getMethod · 0.45
is_emptyMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected