Skip to content

Commit 196f01a

Browse files
committed
Improve error handling / propagation
1 parent 1a9fa58 commit 196f01a

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/api/struct_enum.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::{bail, ensure};
1+
use anyhow::{Context as _, bail, ensure};
22
use schemars::schema::{ObjectValidation, Schema, SchemaObject};
33

44
use crate::api::{
@@ -25,16 +25,12 @@ impl SameString {
2525
}
2626

2727
impl TypeData {
28-
pub(super) fn inline_struct_enum(
29-
one_of: &Vec<Schema>,
30-
fields: &[Field],
31-
) -> anyhow::Result<Self> {
28+
pub(super) fn inline_struct_enum(one_of: &[Schema], fields: &[Field]) -> anyhow::Result<Self> {
3229
let mut discriminator_field = SameString(None);
3330
let mut content_field = SameString(None);
34-
3531
let mut variants = vec![];
3632

37-
for s in one_of {
33+
let mut process_one_of = |s: &Schema| {
3834
let variant = get_obj_validation(s)?;
3935

4036
let (variant_discriminator_name, discriminator) = get_discriminator(variant)?;
@@ -62,15 +58,23 @@ impl TypeData {
6258
content,
6359
});
6460
}
61+
62+
Ok(())
63+
};
64+
65+
for (idx, s) in one_of.iter().enumerate() {
66+
process_one_of(s).with_context(|| format!("oneOf[{idx}]"))?;
6567
}
6668

6769
Ok(Self::StructEnum {
6870
discriminator_field: discriminator_field
6971
.inner()
70-
.expect("failed to fine discriminator field"),
72+
.context("failed to find discriminator field")?,
7173
fields: fields.to_vec(),
7274
repr: StructEnumRepr::AdjacentlyTagged {
73-
content_field: content_field.inner().expect("failed to fine content field"),
75+
content_field: content_field
76+
.inner()
77+
.context("failed to find content field")?,
7478
variants,
7579
},
7680
})
@@ -108,7 +112,7 @@ fn get_discriminator(obj: &ObjectValidation) -> anyhow::Result<(String, String)>
108112
let mut discriminator = None;
109113

110114
for (p_name, p) in &obj.properties {
111-
let schema_obj = get_schema_obj(p)?;
115+
let schema_obj = get_schema_obj(p).with_context(|| p_name.to_owned())?;
112116
if let Some(enum_vals) = &schema_obj.enum_values
113117
&& enum_vals.len() == 1
114118
{

0 commit comments

Comments
 (0)