Skip to content

Commit 1404c21

Browse files
committed
reuse descriptor methods for all listings
1 parent 97d71ce commit 1404c21

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1682
-5423
lines changed

crates/build/re_types_builder/src/codegen/rust/api.rs

+28-27
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,6 @@ fn quote_trait_impls_for_archetype(obj: &Object) -> TokenStream {
10421042
assert_eq!(kind, &ObjectKind::Archetype);
10431043

10441044
let display_name = re_case::to_human_case(name);
1045-
let archetype_name = &obj.fqname;
10461045
let name = format_ident!("{name}");
10471046

10481047
fn compute_component_descriptors(
@@ -1056,18 +1055,11 @@ fn quote_trait_impls_for_archetype(obj: &Object) -> TokenStream {
10561055
field
10571056
.try_get_attr::<String>(requirement_attr_value)
10581057
.map(|_| {
1059-
let Some(component_name) = field.typ.fqname() else {
1060-
panic!("Archetype field must be an object/union or an array/vector of such")
1061-
};
1062-
1063-
let archetype_name = &obj.fqname;
1058+
let archetype_name = format_ident!("{}", obj.name);
10641059
let archetype_field_name = field.snake_case_name();
1060+
let fn_name = format_ident!("descriptor_{archetype_field_name}");
10651061

1066-
quote!(ComponentDescriptor {
1067-
archetype_name: Some(#archetype_name.into()),
1068-
component_name: #component_name.into(),
1069-
archetype_field_name: Some(#archetype_field_name.into()),
1070-
})
1062+
quote!(#archetype_name::#fn_name())
10711063
})
10721064
})
10731065
.collect_vec();
@@ -1106,15 +1098,35 @@ fn quote_trait_impls_for_archetype(obj: &Object) -> TokenStream {
11061098
}
11071099
}
11081100
})
1101+
.chain(std::iter::once({
1102+
let archetype_name = &obj.fqname;
1103+
let indicator_component_name = format!(
1104+
"{}Indicator",
1105+
obj.fqname.replace("archetypes", "components")
1106+
);
1107+
1108+
let doc = "Returns the [`ComponentDescriptor`] for the associated indicator component.";
1109+
1110+
quote! {
1111+
#[doc = #doc]
1112+
#[inline]
1113+
pub fn descriptor_indicator() -> ComponentDescriptor {
1114+
ComponentDescriptor {
1115+
archetype_name: Some(#archetype_name.into()),
1116+
component_name: #indicator_component_name.into(),
1117+
archetype_field_name: None,
1118+
}
1119+
}
1120+
}
1121+
}))
11091122
.collect_vec();
11101123

1124+
let archetype_name = format_ident!("{}", obj.name);
11111125
let indicator_name = format!("{}Indicator", obj.name);
11121126

11131127
let quoted_indicator_name = format_ident!("{indicator_name}");
11141128
let quoted_indicator_doc =
11151129
format!("Indicator component for the [`{name}`] [`::re_types_core::Archetype`]");
1116-
let indicator_component_name =
1117-
format!("{}Indicator", fqname.replace("archetypes", "components"));
11181130

11191131
let (num_required_descriptors, required_descriptors) =
11201132
compute_component_descriptors(obj, ATTR_RERUN_COMPONENT_REQUIRED);
@@ -1126,11 +1138,7 @@ fn quote_trait_impls_for_archetype(obj: &Object) -> TokenStream {
11261138
num_recommended_descriptors += 1;
11271139
recommended_descriptors = quote! {
11281140
#recommended_descriptors
1129-
ComponentDescriptor {
1130-
archetype_name: Some(#archetype_name.into()),
1131-
component_name: #indicator_component_name.into(),
1132-
archetype_field_name: None,
1133-
},
1141+
#archetype_name::descriptor_indicator(),
11341142
};
11351143

11361144
let num_components_docstring = quote_doc_line(&format!(
@@ -1190,21 +1198,14 @@ fn quote_trait_impls_for_archetype(obj: &Object) -> TokenStream {
11901198
quote!{ Some(&self.#field_name as &dyn ComponentBatch) }
11911199
};
11921200

1193-
let Some(component_name) = obj_field.typ.fqname() else {
1194-
panic!("Archetype field must be an object/union or an array/vector of such")
1195-
};
1196-
let archetype_name = &obj.fqname;
11971201
let archetype_field_name = obj_field.snake_case_name();
1202+
let descr_fn_name = format_ident!("descriptor_{archetype_field_name}");
11981203

11991204
quote! {
12001205
(#batch).map(|batch| {
12011206
::re_types_core::ComponentBatchCowWithDescriptor {
12021207
batch: batch.into(),
1203-
descriptor_override: Some(ComponentDescriptor {
1204-
archetype_name: Some(#archetype_name.into()),
1205-
archetype_field_name: Some((#archetype_field_name).into()),
1206-
component_name: (#component_name).into(),
1207-
}),
1208+
descriptor_override: Some(Self::#descr_fn_name()),
12081209
}
12091210
})
12101211

crates/store/re_types/src/archetypes/annotation_context.rs

+15-29
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)