use crate::schema::graph::{RefResolutionError, SchemaGraph};
use crate::schema::metadata::Role;
use crate::schema::schema_type::{SchemaType, VariantCaseType};
pub fn multimodal_variant_cases<'a>(
graph: &'a SchemaGraph,
ty: &'a SchemaType,
) -> Result<Option<&'a [VariantCaseType]>, RefResolutionError> {
as_multimodal_list_variant(graph, ty)
}
pub fn is_multimodal_schema_type(
graph: &SchemaGraph,
ty: &SchemaType,
) -> Result<bool, RefResolutionError> {
Ok(as_multimodal_list_variant(graph, ty)?.is_some())
}
fn as_multimodal_list_variant<'a>(
graph: &'a SchemaGraph,
ty: &'a SchemaType,
) -> Result<Option<&'a [VariantCaseType]>, RefResolutionError> {
if let SchemaType::List { element, metadata } = graph.resolve_ref(ty)?
&& metadata.role == Some(Role::Multimodal)
&& let SchemaType::Variant { cases, .. } = graph.resolve_ref(element)?
{
return Ok(Some(cases));
}
Ok(None)
}