Skip to content

Commit c0c9915

Browse files
Add no_enum to disable top-level type (#11)
1 parent a51f48c commit c0c9915

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

src/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ struct StructOpts {
3333
/// Error type and expression to use for partial getter methods.
3434
#[darling(default)]
3535
partial_getter_error: ErrorOpts,
36+
/// Turn off the generation of the top-level enum that binds the variants together.
37+
#[darling(default)]
38+
no_enum: bool,
3639
}
3740

3841
/// Field-level configuration.
@@ -203,6 +206,11 @@ pub fn superstruct(args: TokenStream, input: TokenStream) -> TokenStream {
203206
output_items.push(variant_code.into());
204207
}
205208

209+
// If the `no_enum` attribute is set, stop after generating variant structs.
210+
if opts.no_enum {
211+
return TokenStream::from_iter(output_items);
212+
}
213+
206214
// Construct the top-level enum.
207215
let top_level_attrs = discard_superstruct_attrs(&item.attrs);
208216
let enum_item = quote! {

tests/basic.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,20 @@ fn cfg_attribute() {
120120
});
121121
assert_eq!(*b.partial().unwrap(), 5);
122122
}
123+
124+
#[test]
125+
fn no_enum() {
126+
#[superstruct(variants(A, B), no_enum)]
127+
struct Message {
128+
#[superstruct(only(A))]
129+
pub x: u64,
130+
#[superstruct(only(B))]
131+
pub y: u64,
132+
}
133+
134+
type Message = MessageA;
135+
136+
let a: Message = Message { x: 0 };
137+
let b: MessageB = MessageB { y: 0 };
138+
assert_eq!(a.x, b.y);
139+
}

tests/nested.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,5 @@ fn nesting() {
4343

4444
assert_eq!(a.inner_a().unwrap().both, b.inner_b().unwrap().both);
4545
assert_eq!(a.inner().both(), b.inner().both());
46+
assert_eq!(a.inner_a().unwrap().only_a, "world");
4647
}

0 commit comments

Comments
 (0)