1use std::convert::From;
4use std::error;
5use std::fmt;
6
7use spglib_sys as ffi;
8
9#[derive(Clone, Debug)]
11pub enum SpglibError {
12 SpacegroupSearchFailed,
14 CellStandardizationFailed,
16 SymmetryOperationSearchFailed,
18 AtomsTooClose,
20 PointgroupNotFound,
22 NiggliFailed,
24 DelaunayFailed,
26 ArraySizeShortage,
28 Unknown,
30}
31
32impl From<ffi::SpglibError> for SpglibError {
33 fn from(item: ffi::SpglibError) -> Self {
34 match item {
35 1 => SpglibError::SpacegroupSearchFailed,
36 2 => SpglibError::CellStandardizationFailed,
37 3 => SpglibError::SymmetryOperationSearchFailed,
38 4 => SpglibError::AtomsTooClose,
39 5 => SpglibError::PointgroupNotFound,
40 6 => SpglibError::NiggliFailed,
41 7 => SpglibError::DelaunayFailed,
42 8 => SpglibError::ArraySizeShortage,
43 _ => SpglibError::Unknown,
44 }
45 }
46}
47
48impl fmt::Display for SpglibError {
49 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
50 match *self {
51 SpglibError::SpacegroupSearchFailed => write!(f, "space group search failed"),
52 SpglibError::CellStandardizationFailed => write!(f, "cell standardization failed"),
53 SpglibError::SymmetryOperationSearchFailed => {
54 write!(f, "symmetry operation search failed")
55 }
56 SpglibError::AtomsTooClose => write!(f, "atoms too close"),
57 SpglibError::PointgroupNotFound => write!(f, "pointgroup not found"),
58 SpglibError::NiggliFailed => write!(f, "niggli failed"),
59 SpglibError::DelaunayFailed => write!(f, "delaunay failed"),
60 SpglibError::ArraySizeShortage => write!(f, "array size shortage"),
61 SpglibError::Unknown => write!(f, "unknown error"),
62 }
63 }
64}
65
66impl error::Error for SpglibError {}