spc_core/
parse.rs

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}