reda_gds/io/read/
error.rs1use 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>;