1#![doc = include_str!("readme.md")]
2
3#[derive(Debug, Clone, PartialEq)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct PowerShellRoot {
7 pub items: Vec<PowerShellItem>,
9}
10
11#[derive(Debug, Clone, PartialEq)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub enum PowerShellItem {
15 Statement(PowerShellStatement),
17 Function(PowerShellFunction),
19 Class(PowerShellClass),
21 Workflow(PowerShellWorkflow),
23}
24
25#[derive(Debug, Clone, PartialEq)]
27#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
28pub enum PowerShellStatement {
29 Expression(Box<PowerShellExpression>),
31 Assignment(PowerShellAssignment),
33 If(PowerShellIf),
35 While(PowerShellWhile),
37 For(PowerShellFor),
39 ForEach(PowerShellForEach),
41 Switch(PowerShellSwitch),
43 Try(PowerShellTry),
45 Return(PowerShellReturn),
47 Break(PowerShellBreak),
49 Continue(PowerShellContinue),
51 Exit(PowerShellExit),
53 Throw(PowerShellThrow),
55 Block(PowerShellBlock),
57}
58
59#[derive(Debug, Clone, PartialEq)]
61#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
62pub enum PowerShellExpression {
63 Literal(PowerShellLiteral),
65 Variable(PowerShellVariable),
67 Command(PowerShellCommand),
69 Pipeline(PowerShellPipeline),
71 Binary(PowerShellBinaryOp),
73 Unary(PowerShellUnaryOp),
75 Member(PowerShellMemberAccess),
77 Index(PowerShellIndexAccess),
79 Subexpression(Box<PowerShellExpression>),
81 Array(PowerShellArray),
83 Hashtable(PowerShellHashtable),
85 ScriptBlock(PowerShellScriptBlock),
87}
88
89#[derive(Debug, Clone, PartialEq)]
91#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
92pub enum PowerShellLiteral {
93 String(String),
95 Number(String),
97 Boolean(bool),
99 Null,
101}
102
103#[derive(Debug, Clone, PartialEq)]
105#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
106pub struct PowerShellVariable {
107 pub name: String,
109 pub scope: Option<String>,
111}
112
113#[derive(Debug, Clone, PartialEq)]
115#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
116pub struct PowerShellCommand {
117 pub name: String,
119 pub arguments: Vec<PowerShellArgument>,
121}
122
123#[derive(Debug, Clone, PartialEq)]
125#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
126pub enum PowerShellArgument {
127 Positional(Box<PowerShellExpression>),
129 Named(String, Box<PowerShellExpression>),
131 Switch(String),
133}
134
135#[derive(Debug, Clone, PartialEq)]
137#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
138pub struct PowerShellPipeline {
139 pub commands: Vec<PowerShellCommand>,
141}
142
143#[derive(Debug, Clone, PartialEq)]
145#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
146pub struct PowerShellBinaryOp {
147 pub left: Box<PowerShellExpression>,
149 pub operator: PowerShellBinaryOperator,
151 pub right: Box<PowerShellExpression>,
153}
154
155#[derive(Debug, Clone, PartialEq)]
157#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
158pub enum PowerShellBinaryOperator {
159 Add,
161 Subtract,
163 Multiply,
165 Divide,
167 Modulo,
169 Equal,
171 NotEqual,
173 Less,
175 LessEqual,
177 Greater,
179 GreaterEqual,
181 Like,
183 NotLike,
185 Match,
187 NotMatch,
189 Contains,
191 NotContains,
193 In,
195 NotIn,
197 And,
199 Or,
201 Xor,
203 BitwiseAnd,
205 BitwiseOr,
207 BitwiseXor,
209}
210
211#[derive(Debug, Clone, PartialEq)]
213#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
214pub struct PowerShellUnaryOp {
215 pub operator: PowerShellUnaryOperator,
217 pub operand: Box<PowerShellExpression>,
219}
220
221#[derive(Debug, Clone, PartialEq)]
223#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
224pub enum PowerShellUnaryOperator {
225 Plus,
227 Minus,
229 Not,
231 BitwiseNot,
233 Increment,
235 Decrement,
237}
238
239#[derive(Debug, Clone, PartialEq)]
241#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
242pub struct PowerShellMemberAccess {
243 pub object: Box<PowerShellExpression>,
245 pub member: String,
247}
248
249#[derive(Debug, Clone, PartialEq)]
251#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
252pub struct PowerShellIndexAccess {
253 pub object: Box<PowerShellExpression>,
255 pub index: Box<PowerShellExpression>,
257}
258
259#[derive(Debug, Clone, PartialEq)]
261#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
262pub struct PowerShellArray {
263 pub elements: Vec<PowerShellExpression>,
265}
266
267#[derive(Debug, Clone, PartialEq)]
269#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
270pub struct PowerShellHashtable {
271 pub entries: Vec<PowerShellHashtableEntry>,
273}
274
275#[derive(Debug, Clone, PartialEq)]
277#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
278pub struct PowerShellHashtableEntry {
279 pub key: Box<PowerShellExpression>,
281 pub value: Box<PowerShellExpression>,
283}
284
285#[derive(Debug, Clone, PartialEq)]
287#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
288pub struct PowerShellScriptBlock {
289 pub statements: Vec<PowerShellStatement>,
291}
292
293#[derive(Debug, Clone, PartialEq)]
295#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
296pub struct PowerShellAssignment {
297 pub target: Box<PowerShellExpression>,
299 pub operator: PowerShellAssignmentOperator,
301 pub value: Box<PowerShellExpression>,
303}
304
305#[derive(Debug, Clone, PartialEq)]
307#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
308pub enum PowerShellAssignmentOperator {
309 Assign,
311 PlusAssign,
313 MinusAssign,
315 MultiplyAssign,
317 DivideAssign,
319 ModuloAssign,
321}
322
323#[derive(Debug, Clone, PartialEq)]
325#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
326pub struct PowerShellIf {
327 pub condition: Box<PowerShellExpression>,
329 pub then_block: PowerShellScriptBlock,
331 pub elseif_blocks: Vec<PowerShellElseIf>,
333 pub else_block: Option<PowerShellScriptBlock>,
335}
336
337#[derive(Debug, Clone, PartialEq)]
339#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
340pub struct PowerShellElseIf {
341 pub condition: Box<PowerShellExpression>,
343 pub block: PowerShellScriptBlock,
345}
346
347#[derive(Debug, Clone, PartialEq)]
349#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
350pub struct PowerShellWhile {
351 pub condition: Box<PowerShellExpression>,
353 pub block: PowerShellScriptBlock,
355}
356
357#[derive(Debug, Clone, PartialEq)]
359#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
360pub struct PowerShellFor {
361 pub init: Option<Box<PowerShellExpression>>,
363 pub condition: Option<Box<PowerShellExpression>>,
365 pub update: Option<Box<PowerShellExpression>>,
367 pub block: PowerShellScriptBlock,
369}
370
371#[derive(Debug, Clone, PartialEq)]
373#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
374pub struct PowerShellForEach {
375 pub variable: PowerShellVariable,
377 pub collection: Box<PowerShellExpression>,
379 pub block: PowerShellScriptBlock,
381}
382
383#[derive(Debug, Clone, PartialEq)]
385#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
386pub struct PowerShellSwitch {
387 pub expression: Box<PowerShellExpression>,
389 pub cases: Vec<PowerShellSwitchCase>,
391 pub default: Option<PowerShellScriptBlock>,
393}
394
395#[derive(Debug, Clone, PartialEq)]
397#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
398pub struct PowerShellSwitchCase {
399 pub pattern: Box<PowerShellExpression>,
401 pub block: PowerShellScriptBlock,
403}
404
405#[derive(Debug, Clone, PartialEq)]
407#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
408pub struct PowerShellTry {
409 pub block: PowerShellScriptBlock,
411 pub catch_blocks: Vec<PowerShellCatch>,
413 pub finally_block: Option<PowerShellScriptBlock>,
415}
416
417#[derive(Debug, Clone, PartialEq)]
419#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
420pub struct PowerShellCatch {
421 pub exception_type: Option<String>,
423 pub block: PowerShellScriptBlock,
425}
426
427#[derive(Debug, Clone, PartialEq)]
429#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
430pub struct PowerShellReturn {
431 pub value: Option<Box<PowerShellExpression>>,
433}
434
435#[derive(Debug, Clone, PartialEq)]
437#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
438pub struct PowerShellBreak {
439 pub label: Option<String>,
441}
442
443#[derive(Debug, Clone, PartialEq)]
445#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
446pub struct PowerShellContinue {
447 pub label: Option<String>,
449}
450
451#[derive(Debug, Clone, PartialEq)]
453#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
454pub struct PowerShellExit {
455 pub code: Option<Box<PowerShellExpression>>,
457}
458
459#[derive(Debug, Clone, PartialEq)]
461#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
462pub struct PowerShellThrow {
463 pub exception: Option<Box<PowerShellExpression>>,
465}
466
467#[derive(Debug, Clone, PartialEq)]
469#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
470pub struct PowerShellBlock {
471 pub statements: Vec<PowerShellStatement>,
473}
474
475#[derive(Debug, Clone, PartialEq)]
477#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
478pub struct PowerShellFunction {
479 pub name: String,
481 pub body: PowerShellScriptBlock,
483 pub attributes: Vec<PowerShellAttribute>,
485}
486
487#[derive(Debug, Clone, PartialEq)]
489#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
490pub struct PowerShellParamBlock {
491 pub parameters: Vec<PowerShellParameter>,
493}
494
495#[derive(Debug, Clone, PartialEq)]
497#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
498pub struct PowerShellParameter {
499 pub name: String,
501 pub param_type: Option<String>,
503 pub default_value: Option<Box<PowerShellExpression>>,
505 pub attributes: Vec<PowerShellAttribute>,
507}
508
509#[derive(Debug, Clone, PartialEq)]
511#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
512pub struct PowerShellAttribute {
513 pub name: String,
515 pub arguments: Vec<PowerShellExpression>,
517}
518
519#[derive(Debug, Clone, PartialEq)]
521#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
522pub struct PowerShellClass {
523 pub name: String,
525 pub base_class: Option<String>,
527 pub members: Vec<PowerShellClassMember>,
529}
530
531#[derive(Debug, Clone, PartialEq)]
533#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
534pub enum PowerShellClassMember {
535 Property(PowerShellProperty),
537 Method(PowerShellMethod),
539 Constructor(PowerShellConstructor),
541}
542
543#[derive(Debug, Clone, PartialEq)]
545#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
546pub struct PowerShellProperty {
547 pub name: String,
549 pub property_type: Option<String>,
551 pub default_value: Option<Box<PowerShellExpression>>,
553 pub attributes: Vec<PowerShellAttribute>,
555}
556
557#[derive(Debug, Clone, PartialEq)]
559#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
560pub struct PowerShellMethod {
561 pub name: String,
563 pub return_type: Option<String>,
565 pub parameters: Vec<PowerShellParameter>,
567 pub body: PowerShellScriptBlock,
569 pub attributes: Vec<PowerShellAttribute>,
571}
572
573#[derive(Debug, Clone, PartialEq)]
575#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
576pub struct PowerShellConstructor {
577 pub parameters: Vec<PowerShellParameter>,
579 pub body: PowerShellScriptBlock,
581}
582
583#[derive(Debug, Clone, PartialEq)]
585#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
586pub struct PowerShellWorkflow {
587 pub name: String,
589 pub parameters: Vec<PowerShellParameter>,
591 pub body: PowerShellScriptBlock,
593}