use crate::error::YamlError;
use crate::io::traits::ISource;
use crate::parser::ParseResult;
use crate::parser::lexer::Token;
use crate::parser::token_stream::TokenStream;
pub enum FlowContext {
Sequence,
Mapping,
}
pub fn expected_separator_or_end_error(
stream: &mut TokenStream,
ctx: FlowContext,
) -> crate::error::YamlError {
match ctx {
FlowContext::Sequence => crate::parser::utils::error_builder::syntax_error(
stream.source_mut(),
"Expected comma or ] in flow sequence",
),
FlowContext::Mapping => crate::parser::utils::error_builder::syntax_error(
stream.source_mut(),
"Expected comma or } in flow mapping",
),
}
}
pub fn ensure_separator_or_end(
stream: &mut TokenStream,
ctx: FlowContext,
closing: Token,
) -> ParseResult<()> {
match stream.current() {
Some(Token::Comma) => Ok(()),
Some(t) if t == &closing => Ok(()),
_ => Err(expected_separator_or_end_error(stream, ctx)),
}
}
pub fn consume_trailing_separators_and_closers_in_block_sequence(
stream: &mut TokenStream,
) -> ParseResult<()> {
loop {
stream.skip_newlines_and_comments()?;
match stream.current() {
Some(Token::Comma) => {
stream.next()?;
continue;
}
Some(Token::FlowMappingEnd) | Some(Token::FlowSequenceEnd) => {
stream.next()?;
continue;
}
_ => break,
}
}
Ok(())
}
pub fn unexpected_extra_closing_bracket_in_flow_sequence(
stream: &mut TokenStream,
) -> crate::error::YamlError {
crate::parser::utils::error_builder::syntax_error(
stream.source_mut(),
"Unexpected extra closing bracket ']' in flow sequence",
)
}
pub fn leading_or_double_comma_in_flow_sequence(
stream: &mut TokenStream,
) -> crate::error::YamlError {
crate::parser::utils::error_builder::syntax_error(
stream.source_mut(),
"Leading or double comma in flow sequence is not allowed",
)
}
pub fn unexpected_eof_in_flow_mapping_unclosed(
stream: &mut TokenStream,
) -> crate::error::YamlError {
crate::parser::utils::error_builder::syntax_error(
stream.source_mut(),
"Syntax error: Unexpected end of input in flow mapping (unclosed '{')",
)
}
pub fn unexpected_eof_in_flow_sequence(_stream: &mut TokenStream) -> crate::error::YamlError {
crate::parser::utils::error_builder::eof_error("flow sequence")
}
pub fn invalid_bare_dash_entries_in_flow_sequence(
stream: &mut TokenStream,
) -> crate::error::YamlError {
crate::parser::utils::error_builder::mapping_key_error_yaml(
stream.source_mut(),
"Invalid use of '-' indicators inside flow sequence",
)
}
pub fn invalid_content_immediately_after_flow_closer(
source: &mut dyn ISource,
closer: char,
found: char,
) -> YamlError {
crate::parser::utils::error_builder::syntax_error(
source,
&format!(
"YAML syntax error: Invalid content '{}' immediately after '{}' - whitespace or newline required",
found, closer
),
)
}
pub fn expected_colon_in_flow_mapping(source: &mut dyn ISource) -> YamlError {
crate::parser::utils::error_builder::expected_error(source, ": in flow mapping")
}