use crate::parser::core::error::{ParseError, ParseErrorKind};
use crate::parser::core::token::TokenKind;
use crate::parser::parsing::parse_context::ParseContext;
use linkrs_core::EdgeDirection;
pub fn resolve_edge_direction(incoming: bool, closing: &TokenKind) -> Option<EdgeDirection> {
let outgoing_close = matches!(closing, TokenKind::Arrow | TokenKind::RightArrow);
let undirected_close = matches!(closing, TokenKind::Minus);
match (incoming, outgoing_close, undirected_close) {
(false, true, _) => Some(EdgeDirection::Out),
(false, false, true) => Some(EdgeDirection::Both),
(true, true, _) => Some(EdgeDirection::Both),
(true, false, true) => Some(EdgeDirection::In),
_ => None,
}
}
pub fn reject_qualified_reference(ctx: &mut ParseContext, name: &str) -> Result<(), ParseError> {
if ctx.match_token(TokenKind::Dot) {
let table = ctx.expect_identifier()?;
let pos = ctx.current_position();
return Err(ParseError::new(
ParseErrorKind::UnexpectedToken,
crate::attached::qualified_reference_message(name, &table),
pos,
));
}
Ok(())
}