1use crate::{
2 block::Block,
3 header::{Header, HeaderParseError, SubheaderParseError},
4 logblock::{LogBlock, LogHeaderParseError},
5};
6
7#[derive(Debug, thiserror::Error, miette::Diagnostic)]
8pub(crate) enum ParseError {
9 #[error("failed to parse log block: {0:?}")]
10 Log(#[from] LogHeaderParseError),
11 #[error("failed to parse subheader: {0:?}")]
12 Subheader(#[from] SubheaderParseError),
13 #[error("failed to parse header: {0:?}")]
14 Header(#[from] HeaderParseError),
15}
16
17pub(crate) trait Parse {
18 type Parsed;
19 fn parse(&self) -> Self::Parsed;
20}
21
22pub(crate) trait TryParse {
23 type Parsed;
24 type Error;
25 fn try_parse(&self) -> Result<Self::Parsed, Self::Error>;
26}
27
28#[derive(Clone, Debug)]
29pub struct ParsedSPC {
30 pub(crate) header: Header,
31 pub(crate) block: Block,
32 pub(crate) log: Option<LogBlock>,
33}