use crate::ast::Span;
use crate::parser::specialization::parse_optional_definition_header_after_identification;
use crate::parser::usage::{feature_usage_header, usage_header, UsageHeader};
use crate::parser::Input;
use nom::IResult;
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub(crate) struct DefinitionHeaderParts {
pub specializes: Option<String>,
pub specializes_span: Option<Span>,
}
pub(crate) fn parse_definition_header_after_ident(
input: Input<'_>,
) -> IResult<Input<'_>, DefinitionHeaderParts> {
let (input, (specializes, specializes_span)) =
parse_optional_definition_header_after_identification(input)?;
Ok((
input,
DefinitionHeaderParts {
specializes,
specializes_span,
},
))
}
pub(crate) type FeatureHeaderParts = UsageHeader;
pub(crate) fn parse_feature_usage_header(
input: Input<'_>,
) -> IResult<Input<'_>, FeatureHeaderParts> {
feature_usage_header(input)
}
pub(crate) fn parse_usage_header(input: Input<'_>) -> IResult<Input<'_>, FeatureHeaderParts> {
usage_header(input)
}