conspire/domain/density/
mod.rs1#[cfg(test)]
2mod test;
3
4use crate::{math::Quantity, mechanics::ReferenceCoordinate, units::Density};
5
6#[derive(Clone, Copy, Debug)]
7pub struct NoDensity;
8
9pub trait DensityField {
10 type Resolved<S>;
11 fn density(&self, coordinate: &ReferenceCoordinate) -> Quantity<Density>;
12 fn resolve<S>(&self, build: impl FnOnce(&Self) -> S) -> Self::Resolved<S>;
13}
14
15impl DensityField for Quantity<Density> {
16 type Resolved<S> = Quantity<Density>;
17 fn density(&self, _coordinate: &ReferenceCoordinate) -> Quantity<Density> {
18 *self
19 }
20 fn resolve<S>(&self, _build: impl FnOnce(&Self) -> S) -> Quantity<Density> {
21 *self
22 }
23}
24
25impl<F> DensityField for F
26where
27 F: Fn(&ReferenceCoordinate) -> Quantity<Density>,
28{
29 type Resolved<S> = S;
30 fn density(&self, coordinate: &ReferenceCoordinate) -> Quantity<Density> {
31 self(coordinate)
32 }
33 fn resolve<S>(&self, build: impl FnOnce(&Self) -> S) -> S {
34 build(self)
35 }
36}