molframe_spatial/planning/resolver/
dispatch.rs1use super::StructureSpatial;
4use super::matching::{resolve_beyond_request, resolve_within_request};
5use molframe_core::diagnostic::{Code, Diagnostic};
6use molframe_core::selection::AtomSelection;
7use molframe_query::{GeometricRequest, SpatialResolver};
8
9impl SpatialResolver for StructureSpatial<'_> {
10 fn resolve(&self, request: GeometricRequest<'_>) -> Result<AtomSelection, Diagnostic> {
15 match request {
16 GeometricRequest::Within {
17 universe,
18 target,
19 radius,
20 include_target,
21 } => resolve_within_request(self, universe, target, radius, include_target),
22 GeometricRequest::Beyond {
23 universe,
24 target,
25 radius,
26 } => resolve_beyond_request(self, universe, target, radius),
27 GeometricRequest::SphereZone {
28 universe,
29 target,
30 radius,
31 } => self.radial_from_target(universe, target, 0.0, radius, None),
32 GeometricRequest::SphereLayer {
33 universe,
34 target,
35 inner,
36 outer,
37 } => self.radial_from_target(universe, target, inner, outer, None),
38 GeometricRequest::IsoLayer {
39 universe,
40 target,
41 inner,
42 outer,
43 } => self.iso_layer(universe, target, inner, outer),
44 GeometricRequest::CylinderZone {
45 universe,
46 target,
47 radius,
48 z_max,
49 z_min,
50 } => self.radial_from_target(universe, target, 0.0, radius, Some((z_min, z_max))),
51 GeometricRequest::CylinderLayer {
52 universe,
53 target,
54 inner,
55 outer,
56 z_max,
57 z_min,
58 } => self.radial_from_target(universe, target, inner, outer, Some((z_min, z_max))),
59 GeometricRequest::Point {
60 universe,
61 point,
62 radius,
63 } => self.radial(universe, point, 0.0, radius, None),
64 _ => Err(Diagnostic::new(Code::E9001)),
65 }
66 }
67}