use crate::error::XcError;
use crate::func::{FunctionalInfo, Spin};
use crate::io::{XcInput, XcResult};
pub(crate) mod gga;
pub(crate) mod lda;
pub(crate) mod mgga;
pub(crate) trait XcEval: Send + Sync {
fn info(&self) -> &FunctionalInfo;
fn eval(&self, spin: Spin, np: usize, input: &XcInput) -> Result<XcResult, XcError>;
fn eval_fxc(&self, spin: Spin, np: usize, input: &XcInput) -> Result<XcResult, XcError>;
}
pub(crate) fn check_len(slice: &[f64], expected: usize) -> Result<(), XcError> {
if slice.len() == expected {
Ok(())
} else {
Err(XcError::LengthMismatch {
expected,
found: slice.len(),
})
}
}