1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum AssemblyError {
5 #[error(
6 "Unexpected segment '{segment_id}' at position {position}, expected one of: {expected:?}"
7 )]
8 UnexpectedSegment {
9 segment_id: String,
10 position: usize,
11 expected: Vec<String>,
12 },
13
14 #[error("Missing mandatory segment '{segment_id}' for PID {pid}")]
15 MissingMandatory { segment_id: String, pid: String },
16
17 #[error("Unknown PID: {0}")]
18 UnknownPid(String),
19
20 #[error("PID detection failed: could not determine PID from segments")]
21 PidDetectionFailed,
22
23 #[error("Segment cursor out of bounds at position {0}")]
24 CursorOutOfBounds(usize),
25
26 #[error("Parse error: {0}")]
27 ParseError(String),
28
29 #[error("Expected segment '{expected}' not found")]
30 SegmentNotFound { expected: String },
31}
32
33impl From<mig_types::cursor::SegmentNotFound> for AssemblyError {
34 fn from(e: mig_types::cursor::SegmentNotFound) -> Self {
35 AssemblyError::SegmentNotFound {
36 expected: e.expected,
37 }
38 }
39}