use petgraph::graph::{EdgeIndex, NodeIndex};
use thiserror::Error;
#[derive(Debug, Error, PartialEq)]
pub enum AnalysisError {
#[error("member {0:?} is missing material properties")]
MissingProperties(EdgeIndex),
#[error("member {0:?} has zero length")]
ZeroLengthMember(EdgeIndex),
#[error("member {member:?} has invalid properties: {source}")]
InvalidMemberProperties {
member: EdgeIndex,
#[source]
source: MemberPropertyError,
},
#[error("stiffness matrix is singular; check supports and connectivity")]
SingularStiffness,
}
#[derive(Clone, Copy, Debug, Error, PartialEq)]
pub enum MemberPropertyError {
#[error("area must be positive (received {area})")]
NonPositiveArea {
member: EdgeIndex,
area: f64,
},
#[error("elastic modulus must be positive (received {elastic_modulus})")]
NonPositiveElasticModulus {
member: EdgeIndex,
elastic_modulus: f64,
},
}
#[derive(Debug, Error, PartialEq)]
pub enum TrussEditError {
#[error("joint {0:?} does not exist in this truss")]
UnknownJoint(NodeIndex),
#[error("member {0:?} does not exist in this truss")]
UnknownMember(EdgeIndex),
#[error("{0}")]
InvalidMemberProperties(MemberPropertyError),
}