1use std::process::Command;
4use std::sync::Arc;
5
6use gds::GdsError;
7
8use crate::layout::conv::LayirExportError;
9use crate::layout::error::{GdsImportError, LayoutError};
10use crate::schematic::conv::ConvError;
11
12pub type Result<T, E = Error> = std::result::Result<T, E>;
14
15#[derive(thiserror::Error, Debug, Clone)]
17pub enum Error {
18 #[error("error in layout: {0:?}")]
20 Layout(LayoutError),
21 #[error("I/O error: {0}")]
23 Io(#[from] Arc<std::io::Error>),
24 #[error("internal Substrate error")]
26 Internal,
27 #[error("fatal errors occured while building cell")]
29 CellBuildFatal,
30 #[error(transparent)]
32 CacheError(#[from] Arc<cache::error::Error>),
33 #[error("a thread panicked")]
35 Panic,
36 #[error("error executing command: {0:?}")]
38 CommandFailed(Arc<Command>),
39 #[error("gds error: {0}")]
41 Gds(#[from] GdsError),
42 #[error("error importing GDS: {0}")]
44 GdsImport(#[from] GdsImportError),
45 #[error(transparent)]
47 Boxed(#[from] Arc<dyn std::error::Error + Send + Sync>),
48 #[error(transparent)]
50 Anyhow(#[from] Arc<anyhow::Error>),
51 #[error("error converting to SCIR: {0}")]
53 ScirConversion(#[from] ConvError),
54 #[error("schema does not support primitive")]
56 UnsupportedPrimitive,
57 #[error("error exporting to LayIR")]
59 LayirExport(#[from] LayirExportError),
60}
61
62impl From<std::io::Error> for Error {
63 fn from(value: std::io::Error) -> Self {
64 Self::Io(Arc::new(value))
65 }
66}
67
68impl From<LayoutError> for Error {
69 fn from(value: LayoutError) -> Self {
70 Error::Layout(value)
71 }
72}