bai2 0.4.0

A tool to parse BAI2 files
Documentation
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum NodeType {
    AccountIdentifier,
    AccountTrailer,
    Continuation,
    FileHeader,
    FileTrailer,
    GroupHeader,
    GroupTrailer,
    TransactionDetail,
}

#[derive(Debug)]
pub struct Node {
    pub children: Vec<Node>,
    pub continuations: Vec<Node>,
    pub line: String,
    pub sibling: Box<Option<Node>>,
    pub r#type: NodeType,
}

impl Node {
    pub fn fields(&self) -> Vec<&str> {
        let mut fields: Vec<&str> = self.line.split(",").collect();

        for continuation in &self.continuations {
            let continuation_fields = continuation.line.split(",").skip(1);
            for field in continuation_fields {
                fields.push(field);
            }
        }

        fields
    }

    pub fn has_continuations(&self) -> bool {
        !self.continuations.is_empty()
    }

    pub fn push_child(&mut self, node: Node) {
        self.children.push(node);
    }

    pub fn push_continuation(&mut self, node: Node) {
        self.continuations.push(node);
    }

    pub fn sibling_fields(&self) -> Vec<&str> {
        match &*self.sibling {
            Some(sibling) => sibling.fields(),
            None => Vec::new(),
        }
    }
}