Skip to content

Commit b607947

Browse files
feat(derive)!: generating presenter for non-Vec outputs
1 parent 1c77d00 commit b607947

File tree

1 file changed

+35
-9
lines changed

1 file changed

+35
-9
lines changed

benzina-derive/src/join/mod.rs

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ impl Transformation {
179179

180180
fn presenter(&self, accumulator: &TokenStream) -> TokenStream {
181181
let Self {
182-
quantity: _,
182+
quantity,
183183
output_type,
184184
entries,
185185
} = self;
@@ -193,15 +193,41 @@ impl Transformation {
193193
#name: #entry
194194
}
195195
});
196-
quote! {
197-
::benzina::__private::std::iter::Iterator::collect::<::benzina::__private::std::vec::Vec<_>>(
198-
::benzina::__private::std::iter::Iterator::map(
199-
::benzina::__private::IndexMap::into_values(#accumulator),
200-
|item| #output_type {
201-
#(#entries),*
202-
}
203-
)
196+
let iterator = quote! {
197+
::benzina::__private::std::iter::Iterator::map(
198+
::benzina::__private::IndexMap::into_values(#accumulator),
199+
|item| #output_type {
200+
#(#entries),*
201+
}
204202
)
203+
};
204+
match quantity {
205+
Quantity::MaybeOne => {
206+
quote! {
207+
::benzina::__private::std::iter::Iterator::next(
208+
&mut #iterator
209+
)
210+
}
211+
}
212+
Quantity::One | Quantity::AssumeOne => {
213+
quote! {
214+
match ::benzina::__private::std::iter::Iterator::next(
215+
&mut #iterator
216+
) {
217+
Some(item) => item,
218+
None => return ::benzina::__private::std::result::Result::Err(
219+
::benzina::__private::diesel::result::Error::NotFound
220+
)
221+
}
222+
}
223+
}
224+
Quantity::AtLeastZero | Quantity::AtLeastOne => {
225+
quote! {
226+
::benzina::__private::std::iter::Iterator::collect::<::benzina::__private::std::vec::Vec<_>>(
227+
#iterator
228+
)
229+
}
230+
}
205231
}
206232
}
207233
}

0 commit comments

Comments
 (0)