use serde::Deserialize;
use serde::Serialize;
use strum::Display;
use mago_token::DocumentKind;
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord, Display)]
#[serde(tag = "type", content = "value")]
pub enum HaltStage {
LookingForLeftParenthesis,
LookingForRightParenthesis,
LookingForTerminator,
End,
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord, Display)]
#[serde(tag = "type", content = "value")]
pub enum Interpolation {
None,
Until(usize),
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize, PartialOrd, Ord, Display)]
#[serde(tag = "type", content = "value")]
pub enum LexerMode<'a> {
Inline,
Script,
DoubleQuoteString(Interpolation),
ShellExecuteString(Interpolation),
DocumentString(DocumentKind, &'a [u8], Interpolation),
Halt(HaltStage),
}