in uniffi_bindgen/src/pipeline/general/sort.rs [154:216]
fn dependency_names(&self, type_def: &TypeDefinition) -> Vec<String> {
match type_def {
TypeDefinition::Simple(_) => vec![],
TypeDefinition::Optional(OptionalType { inner, .. })
| TypeDefinition::Sequence(SequenceType { inner, .. }) => {
vec![inner.canonical_name.clone()]
}
TypeDefinition::Map(MapType { key, value, .. }) => {
vec![key.canonical_name.clone(), value.canonical_name.clone()]
}
TypeDefinition::Record(r) => r
.fields
.iter()
.map(|f| f.ty.canonical_name.clone())
.collect(),
TypeDefinition::Enum(e) => e
.variants
.iter()
.flat_map(|v| v.fields.iter().map(|f| f.ty.canonical_name.clone()))
.collect(),
TypeDefinition::Interface(i) => {
i.trait_impls
.iter()
.map(|i| format!("Type{}", i.trait_name))
.chain(
i.methods
.iter()
.map(|meth| &meth.callable)
.chain(i.vtable.iter().flat_map(|vtable| {
vtable.methods.iter().map(|meth| &meth.callable)
}))
.flat_map(|callable| {
callable
.arguments
.iter()
.map(|a| &a.ty)
.chain(&callable.return_type.ty)
.chain(&callable.throws_type.ty)
.map(|ty| ty.canonical_name.clone())
}),
)
.collect()
}
TypeDefinition::CallbackInterface(c) => c
.vtable
.methods
.iter()
.flat_map(|m| {
m.callable
.arguments
.iter()
.map(|a| &a.ty)
.chain(&m.callable.return_type.ty)
.chain(&m.callable.throws_type.ty)
})
.map(|ty| ty.canonical_name.clone())
.collect(),
TypeDefinition::Custom(custom) => {
vec![custom.builtin.canonical_name.clone()]
}
TypeDefinition::External(_) => vec![],
}
}