1use crate::item::Item;
2use crate::item_kind::ItemKind;
3use crate::statement::Statement;
4use ocelot_base::span::Span;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct Script {
9 pub items: Vec<Item>,
10 pub span: Span,
11}
12
13impl Script {
14 pub fn new(items: Vec<Item>, span: Span) -> Self {
16 Self { items, span }
17 }
18
19 pub fn statements(&self) -> impl Iterator<Item = &Statement> {
21 self.items.iter().filter_map(|item| match &item.kind {
22 ItemKind::Statement(statement) => Some(statement),
23 ItemKind::Test(_) => None,
24 })
25 }
26}
27
28impl Default for Script {
29 fn default() -> Self {
30 Self::new(Vec::new(), Span::default())
31 }
32}