#[non_exhaustive]pub enum Finding {
Show 18 variants
MotorWiderThanMount {
configuration: String,
mount: String,
motor_diameter_m: f64,
mount_inner_diameter_m: f64,
},
MotorTightInMount {
configuration: String,
mount: String,
motor_diameter_m: f64,
mount_inner_diameter_m: f64,
},
MotorOutsideMount {
configuration: String,
mount: String,
},
MotorPastMountTop {
configuration: String,
mount: String,
excess_m: f64,
},
AttachmentOffBody {
component: String,
body: String,
},
AttachmentPastBodyEnd {
component: String,
body: String,
excess_m: f64,
},
PartOutsideRocket {
component: String,
},
InternalPartPastParentEnd {
component: String,
parent: String,
excess_m: f64,
},
InternalPartWiderThanParent {
component: String,
parent: String,
reach_m: f64,
room_m: f64,
},
InternalPartTightInParent {
component: String,
parent: String,
reach_m: f64,
room_m: f64,
},
InternalPartWedgedInParent {
component: String,
parent: String,
reach_m: f64,
room_m: f64,
widest_room_m: f64,
},
PackedPartWiderThanParent {
component: String,
parent: String,
reach_m: f64,
room_m: f64,
room_widens_aft: bool,
},
RingAgainstParentEnd {
ring: String,
parent: String,
reach_m: f64,
room_m: f64,
},
ClusterTubesOverlap {
tube: String,
apart_m: f64,
diameter_m: f64,
},
RingOverlapsInnerTube {
ring: String,
tube: String,
},
CenterOutsideRocket {
stage: String,
station_m: f64,
},
RadiusStep {
fore: String,
aft: String,
fore_radius_m: f64,
aft_radius_m: f64,
},
NoNoseCone {
component: String,
},
}Expand description
A problem found in a design. Serialized with a kind tag.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
MotorWiderThanMount
The motor case is wider than the mount’s inside diameter by more than
motor_fit_slack_m allows (error).
Fields
MotorTightInMount
The motor’s nominal diameter is wider than the mount’s inside diameter, but by no more than
motor_fit_slack_m allows: the real case fits, such as a 29 mm motor in a 1.140 in
(28.956 mm) bore (warning).
Fields
MotorOutsideMount
The motor case doesn’t overlap its mount along the axis at all, such as an overhang typed in millimeters as meters (error).
MotorPastMountTop
The motor case reaches forward past the mount’s forward end (warning).
Fields
AttachmentOffBody
An external part (fin root, tube fins, lug, rail button or pod set) doesn’t overlap the body tube it is attached to at all (error). A pod set of no length touches its tube when it sits between the tube’s ends, and a part on a pod’s tube of no length when it spans the tube’s station.
AttachmentPastBodyEnd
An external part runs past an end of its body tube (warning). Pods are exempt: a pod hangs from a pylon and often runs past its tube. So is a part on a pod’s tube of no length, which has no length to run past.
PartOutsideRocket
An internal part lies wholly forward of the nose tip or aft of the rocket’s end, and touches none of the parts it hangs from (a motor mount may stick out) (error).
InternalPartPastParentEnd
An internal part runs past an end of its parent (warning).
InternalPartWiderThanParent
An internal part reaches farther from its parent’s axis than the parent has room, a tube’s
bore or a nose cone’s or transition’s inside radius along the part (for a rigid part the
most room along it, for a packed part the least), by more than
fit_tolerance_m (error). A centering ring that wraps its parent inner tube, on the
tube’s axis with its bore at least the tube’s outside, is measured against what holds the
tube instead.
Fields
InternalPartTightInParent
An internal part reaches past the room in its parent by no more than fit_tolerance_m: a
fit to sand. The mass where it crosses its parent’s wall counts twice (warning). A ring
wrapping its parent tube is measured as for Finding::InternalPartWiderThanParent.
Fields
InternalPartWedgedInParent
An internal part other than a packed part fits inside a nose cone or transition where the
profile is widest along the part, to fit_tolerance_m, but reaches into the wall where
the profile narrows, past that tolerance: as drawn it can’t slide that far in (warning,
#313). It flies where it is drawn, so its mass sits a little nearer the narrow end than it
could.
Fields
PackedPartWiderThanParent
A packed part (a mass component, parachute, streamer or shock cord) reaches past the room in its parent, its center inside the room (warning). Its width is how it is packed, which sets only its own share of the rocket’s inertia; its mass, length and station fly as drawn.
Fields
room_widens_aft: boolWhether the parent has more room aft of the part than along it, as a nose cone or a
shoulder does: the part’s mass can sit only farther aft than drawn, so its center of
gravity flies forward of where it can be and the stability margin may read high
(issue #367). Read as false from a
finding saved before it was kept.
RingAgainstParentEnd
A centering ring or bulkhead wider than its parent’s room, past fit_tolerance_m, sits
at one of its parent’s end faces and fits what holds its parent, to that tolerance: a cap
glued against the end, such as a bulkhead sized to the airframe on a coupler’s end. The
mass where it crosses its parent’s wall counts twice (warning).
Fields
ClusterTubesOverlap
Two tubes of a cluster are closer than a tube’s diameter, so they cross: the mass where they cross is counted twice and their motors would not fit (warning).
Fields
RingOverlapsInnerTube
A centering ring overlaps an inner tube beside it, so the mass where they cross is counted twice; an automatic inner radius only clears on-axis tubes (warning).
CenterOutsideRocket
A stage with an axial center-of-mass override (cg_aft_m), its own or a component’s, has
its center forward of the nose tip or aft of the rocket’s end although every internal part
in it is on the rocket, such as a center typed in millimeters as meters (error). Written
before the move to US spelling as centre_outside_rocket, which is still read and never written.
RadiusStep
Adjacent body components’ radii differ where they meet (warning).
Fields
NoNoseCone
The first body component is not a nose cone (warning).
Implementations§
Source§impl Finding
impl Finding
Sourcepub fn describe(&self, name: &dyn Fn(&str) -> String) -> String
pub fn describe(&self, name: &dyn Fn(&str) -> String) -> String
The finding as a sentence, without its severity: the parts by name, which is given a
component’s, stage’s or configuration’s id; sizes in millimeters.
use hpr_design::checks::Finding;
let finding = Finding::InternalPartPastParentEnd {
component: "c1".to_owned(),
parent: "c2".to_owned(),
excess_m: 0.0508,
};
let name = |id: &str| if id == "c1" { "Shock cord" } else { "Body tube" }.to_owned();
assert_eq!(
finding.describe(&name),
"Shock cord runs 50.8 mm past an end of Body tube, which holds it"
);