Skip to content

Commit e2cf38b

Browse files
committed
feat: do not unwrap() potentially None references.
feat: add new `Error` variant `NoReference`
1 parent a98b6b8 commit e2cf38b

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

crates/oas3/src/spec/media_type.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ impl MediaType {
3333
pub fn schema(&self, spec: &Spec) -> Result<ObjectSchema, Error> {
3434
self.schema
3535
.as_ref()
36-
.unwrap()
36+
.ok_or(Error::Ref(super::RefError::NoReference(
37+
super::RefType::Schema,
38+
)))?
3739
.resolve(spec)
3840
.map_err(Error::Ref)
3941
}

crates/oas3/src/spec/operation.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ impl Operation {
132132
pub fn request_body(&self, spec: &Spec) -> Result<RequestBody, Error> {
133133
self.request_body
134134
.as_ref()
135-
.unwrap()
135+
.ok_or(Error::Ref(super::RefError::NoReference(
136+
super::RefType::RequestBody,
137+
)))?
136138
.resolve(spec)
137139
.map_err(Error::Ref)
138140
}

crates/oas3/src/spec/ref.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ pub enum RefError {
5454
/// Reference path points outside the given spec file.
5555
#[display("Unresolvable path: {}", _0)]
5656
Unresolvable(#[error(not(source))] String), // TODO: use some kind of path structure
57+
58+
/// `Option<ObjectOrReference<_>>` evaluated to be `None`.
59+
#[display("Cannot attempt to resolve this reference because Option<ObjectOrReference<{}>> evaluated to None", _0)]
60+
NoReference(#[error(not(source))] RefType),
5761
}
5862

5963
/// Component type of a reference.

0 commit comments

Comments
 (0)