Skip to main content

spglib/
error.rs

1//! Error types.
2
3use std::convert::From;
4use std::error;
5use std::fmt;
6
7use spglib_sys as ffi;
8
9/// Possible error codes.
10#[derive(Clone, Debug)]
11pub enum SpglibError {
12    /// Raised when spacegroup search fails.
13    SpacegroupSearchFailed,
14    /// Raised when cell standardization routine fails.
15    CellStandardizationFailed,
16    /// Raised when symmetry operation search fails.
17    SymmetryOperationSearchFailed,
18    /// Raised when atoms in a cell occupy the same site.
19    AtomsTooClose,
20    /// Raised when pointgroup search fails.
21    PointgroupNotFound,
22    /// Raised when Niggli reduction routine fails.
23    NiggliFailed,
24    /// Raised when Delaunay reduction routine fails.
25    DelaunayFailed,
26    /// Raised when an array argument has insufficient capacity.
27    ArraySizeShortage,
28    /// Raised for any unknown errors.
29    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 {}