#![doc = include_str!("readme.md")]
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellRoot {
pub items: Vec<PowerShellItem>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellItem {
Statement(PowerShellStatement),
Function(PowerShellFunction),
Class(PowerShellClass),
Workflow(PowerShellWorkflow),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellStatement {
Expression(Box<PowerShellExpression>),
Assignment(PowerShellAssignment),
If(PowerShellIf),
While(PowerShellWhile),
For(PowerShellFor),
ForEach(PowerShellForEach),
Switch(PowerShellSwitch),
Try(PowerShellTry),
Return(PowerShellReturn),
Break(PowerShellBreak),
Continue(PowerShellContinue),
Exit(PowerShellExit),
Throw(PowerShellThrow),
Block(PowerShellBlock),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellExpression {
Literal(PowerShellLiteral),
Variable(PowerShellVariable),
Command(PowerShellCommand),
Pipeline(PowerShellPipeline),
Binary(PowerShellBinaryOp),
Unary(PowerShellUnaryOp),
Member(PowerShellMemberAccess),
Index(PowerShellIndexAccess),
Subexpression(Box<PowerShellExpression>),
Array(PowerShellArray),
Hashtable(PowerShellHashtable),
ScriptBlock(PowerShellScriptBlock),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellLiteral {
String(String),
Number(String),
Boolean(bool),
Null,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellVariable {
pub name: String,
pub scope: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellCommand {
pub name: String,
pub arguments: Vec<PowerShellArgument>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellArgument {
Positional(Box<PowerShellExpression>),
Named(String, Box<PowerShellExpression>),
Switch(String),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellPipeline {
pub commands: Vec<PowerShellCommand>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellBinaryOp {
pub left: Box<PowerShellExpression>,
pub operator: PowerShellBinaryOperator,
pub right: Box<PowerShellExpression>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellBinaryOperator {
Add,
Subtract,
Multiply,
Divide,
Modulo,
Equal,
NotEqual,
Less,
LessEqual,
Greater,
GreaterEqual,
Like,
NotLike,
Match,
NotMatch,
Contains,
NotContains,
In,
NotIn,
And,
Or,
Xor,
BitwiseAnd,
BitwiseOr,
BitwiseXor,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellUnaryOp {
pub operator: PowerShellUnaryOperator,
pub operand: Box<PowerShellExpression>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellUnaryOperator {
Plus,
Minus,
Not,
BitwiseNot,
Increment,
Decrement,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellMemberAccess {
pub object: Box<PowerShellExpression>,
pub member: String,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellIndexAccess {
pub object: Box<PowerShellExpression>,
pub index: Box<PowerShellExpression>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellArray {
pub elements: Vec<PowerShellExpression>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellHashtable {
pub entries: Vec<PowerShellHashtableEntry>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellHashtableEntry {
pub key: Box<PowerShellExpression>,
pub value: Box<PowerShellExpression>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellScriptBlock {
pub statements: Vec<PowerShellStatement>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellAssignment {
pub target: Box<PowerShellExpression>,
pub operator: PowerShellAssignmentOperator,
pub value: Box<PowerShellExpression>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellAssignmentOperator {
Assign,
PlusAssign,
MinusAssign,
MultiplyAssign,
DivideAssign,
ModuloAssign,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellIf {
pub condition: Box<PowerShellExpression>,
pub then_block: PowerShellScriptBlock,
pub elseif_blocks: Vec<PowerShellElseIf>,
pub else_block: Option<PowerShellScriptBlock>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellElseIf {
pub condition: Box<PowerShellExpression>,
pub block: PowerShellScriptBlock,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellWhile {
pub condition: Box<PowerShellExpression>,
pub block: PowerShellScriptBlock,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellFor {
pub init: Option<Box<PowerShellExpression>>,
pub condition: Option<Box<PowerShellExpression>>,
pub update: Option<Box<PowerShellExpression>>,
pub block: PowerShellScriptBlock,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellForEach {
pub variable: PowerShellVariable,
pub collection: Box<PowerShellExpression>,
pub block: PowerShellScriptBlock,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellSwitch {
pub expression: Box<PowerShellExpression>,
pub cases: Vec<PowerShellSwitchCase>,
pub default: Option<PowerShellScriptBlock>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellSwitchCase {
pub pattern: Box<PowerShellExpression>,
pub block: PowerShellScriptBlock,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellTry {
pub block: PowerShellScriptBlock,
pub catch_blocks: Vec<PowerShellCatch>,
pub finally_block: Option<PowerShellScriptBlock>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellCatch {
pub exception_type: Option<String>,
pub block: PowerShellScriptBlock,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellReturn {
pub value: Option<Box<PowerShellExpression>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellBreak {
pub label: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellContinue {
pub label: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellExit {
pub code: Option<Box<PowerShellExpression>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellThrow {
pub exception: Option<Box<PowerShellExpression>>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellBlock {
pub statements: Vec<PowerShellStatement>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellFunction {
pub name: String,
pub body: PowerShellScriptBlock,
pub attributes: Vec<PowerShellAttribute>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellParamBlock {
pub parameters: Vec<PowerShellParameter>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellParameter {
pub name: String,
pub param_type: Option<String>,
pub default_value: Option<Box<PowerShellExpression>>,
pub attributes: Vec<PowerShellAttribute>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellAttribute {
pub name: String,
pub arguments: Vec<PowerShellExpression>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellClass {
pub name: String,
pub base_class: Option<String>,
pub members: Vec<PowerShellClassMember>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerShellClassMember {
Property(PowerShellProperty),
Method(PowerShellMethod),
Constructor(PowerShellConstructor),
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellProperty {
pub name: String,
pub property_type: Option<String>,
pub default_value: Option<Box<PowerShellExpression>>,
pub attributes: Vec<PowerShellAttribute>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellMethod {
pub name: String,
pub return_type: Option<String>,
pub parameters: Vec<PowerShellParameter>,
pub body: PowerShellScriptBlock,
pub attributes: Vec<PowerShellAttribute>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellConstructor {
pub parameters: Vec<PowerShellParameter>,
pub body: PowerShellScriptBlock,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerShellWorkflow {
pub name: String,
pub parameters: Vec<PowerShellParameter>,
pub body: PowerShellScriptBlock,
}