diff --git a/crates/oas3/src/spec/media_type.rs b/crates/oas3/src/spec/media_type.rs index 7df08ff..c9aebe3 100644 --- a/crates/oas3/src/spec/media_type.rs +++ b/crates/oas3/src/spec/media_type.rs @@ -33,7 +33,9 @@ impl MediaType { pub fn schema(&self, spec: &Spec) -> Result { self.schema .as_ref() - .unwrap() + .ok_or(Error::Ref(super::RefError::NoReference( + super::RefType::Schema, + )))? .resolve(spec) .map_err(Error::Ref) } diff --git a/crates/oas3/src/spec/operation.rs b/crates/oas3/src/spec/operation.rs index 94e16c5..10f4c97 100644 --- a/crates/oas3/src/spec/operation.rs +++ b/crates/oas3/src/spec/operation.rs @@ -132,7 +132,9 @@ impl Operation { pub fn request_body(&self, spec: &Spec) -> Result { self.request_body .as_ref() - .unwrap() + .ok_or(Error::Ref(super::RefError::NoReference( + super::RefType::RequestBody, + )))? .resolve(spec) .map_err(Error::Ref) } diff --git a/crates/oas3/src/spec/ref.rs b/crates/oas3/src/spec/ref.rs index 78be676..e569789 100644 --- a/crates/oas3/src/spec/ref.rs +++ b/crates/oas3/src/spec/ref.rs @@ -54,6 +54,10 @@ pub enum RefError { /// Reference path points outside the given spec file. #[display("Unresolvable path: {}", _0)] Unresolvable(#[error(not(source))] String), // TODO: use some kind of path structure + + /// `Option>` evaluated to be `None`. + #[display("Cannot attempt to resolve this reference because Option> evaluated to None", _0)] + NoReference(#[error(not(source))] RefType), } /// Component type of a reference.