Skip to main content

reda_gds/io/read/
error.rs

1use std::string::FromUtf8Error;
2
3use crate::{
4    GdsArefBuilderError, GdsBoundaryBuilderError, GdsBoxBuilderError, GdsLibraryBuilderError, GdsNodeBuilderError, GdsPathBuilderError, GdsSrefBuilderError, GdsTextBuilderError 
5};
6use crate::io::record::GdsRecordType;
7
8#[derive(Debug, thiserror::Error)]
9pub enum GdsReadError {
10    #[error("Io error '{0}'")]
11    Io(#[from] std::io::Error),
12
13    #[error("Parse utf8 failed '{0}'")]
14    Utf8(#[from] FromUtf8Error),
15
16    #[error("Unsupport record type: '{0}'")]
17    UnsupportRecordType(u16),
18
19    #[error("Record size must >= 4, but got '{0}'")]
20    InvalidRecordSize(usize),
21
22    #[error("Expect record size '{0}', but got '{1}'")]
23    UnexpectRecordSize(usize, usize),
24
25    #[error("Expect record type '{0}', but got '{1}'")]
26    UnexpectRecordType(GdsRecordType, GdsRecordType),
27
28    #[error("Invalid format value '{0}'")]
29    InvalidFormat(u16),
30
31    #[error("Build boundary failed for '{0}'")]
32    BuildBoundary(#[from] GdsBoundaryBuilderError),
33
34    #[error("Build path failed for '{0}'")]
35    BuildPath(#[from] GdsPathBuilderError),
36
37    #[error("Build sref failed for '{0}'")]
38    BuildSref(#[from] GdsSrefBuilderError),
39
40    #[error("Build aref failed for '{0}'")]
41    BuildAref(#[from] GdsArefBuilderError),
42
43    #[error("Build text failed for '{0}'")]
44    BuildText(#[from] GdsTextBuilderError),
45
46    #[error("Build node failed for '{0}'")]
47    BuildNode(#[from] GdsNodeBuilderError),
48
49    #[error("Build box failed for '{0}'")]
50    BuildBox(#[from] GdsBoxBuilderError),
51
52    #[error("Build library failed for '{0}'")]
53    BuildLibrary(#[from] GdsLibraryBuilderError),
54
55    #[error("Except one coord in XY, but got {0}")]
56    ExecptPosition(usize),
57
58    #[error("When {0} >> {1}")]
59    Wrap(String, Box<GdsReadError>)
60}
61
62impl GdsReadError {
63    pub fn wrap<S: Into<String>>(self, context: S) -> Self {
64        Self::Wrap(context.into(), Box::new(self))
65    }
66}
67
68pub type GdsReadResult<T> = Result<T, GdsReadError>;