use crate::analysis::RequestParam;
use crate::parsing::types::BaseType;
pub(crate) fn is_napi_supported(param: &RequestParam) -> bool {
is_napi_supported_type(¶m.field_type().base_type)
}
pub(crate) fn is_napi_supported_type(base_type: &BaseType) -> bool {
match base_type {
BaseType::String
| BaseType::Int32
| BaseType::Int64
| BaseType::Bool
| BaseType::Float32
| BaseType::Float64
| BaseType::Bytes
| BaseType::Unit
| BaseType::Enum(_) => true,
BaseType::Map(k, v) => {
is_napi_supported_type(&k.base_type) && is_napi_supported_type(&v.base_type)
}
BaseType::Message(_) | BaseType::OneOf(_) => false,
}
}
pub(crate) fn is_required_message_body(param: &RequestParam) -> bool {
!param.is_optional()
&& !param.field_type().is_repeated
&& matches!(
param.field_type().base_type,
BaseType::Message(_) | BaseType::OneOf(_)
)
}
pub(crate) fn message_type_name(param: &RequestParam) -> Option<String> {
match ¶m.field_type().base_type {
BaseType::Message(n) | BaseType::OneOf(n) => {
Some(crate::utils::extract_simple_type_name(n))
}
_ => None,
}
}