1mod hyper;
4mod intergrate;
5
6use std::convert::Infallible;
7
8pub use hyper::{HyperRelaxError, HyperRelaxSolver};
9pub use intergrate::{Integrator, Method};
10
11use crate::{image::ImageRef, mesh::Mesh};
12
13pub trait SolverCallback<const N: usize> {
15 type Error;
16
17 fn callback(
19 &mut self,
20 _mesh: &Mesh<N>,
21 _input: ImageRef,
22 _output: ImageRef,
23 _iteration: usize,
24 ) -> Result<(), Self::Error> {
25 Ok(())
26 }
27}
28
29impl<const N: usize> SolverCallback<N> for () {
30 type Error = Infallible;
31}
32
33impl<const N: usize, F: Fn(&Mesh<N>, ImageRef, ImageRef, usize)> SolverCallback<N> for F {
34 type Error = Infallible;
35 fn callback(
36 &mut self,
37 mesh: &Mesh<N>,
38 input: ImageRef,
39 output: ImageRef,
40 iteration: usize,
41 ) -> Result<(), Infallible> {
42 self(mesh, input, output, iteration);
43 Ok(())
44 }
45}