43 lines
954 B
Zig
43 lines
954 B
Zig
const std = @import("std");
|
|
|
|
const Data = enum { foo, bar };
|
|
|
|
pub fn optional_enum_error_union() !?Data {
|
|
const state = struct {
|
|
var flag: u2 = 0;
|
|
};
|
|
defer state.flag +%= 1;
|
|
|
|
return switch (state.flag) {
|
|
0 => null,
|
|
1 => .foo,
|
|
2 => .bar,
|
|
3 => error.Fizz,
|
|
};
|
|
}
|
|
|
|
pub fn main() !void {
|
|
for (0..4) |_| {
|
|
const r1 = if (optional_enum_error_union()) |opt|
|
|
if (opt) |val|
|
|
switch (val) {
|
|
.foo => "FOO",
|
|
.bar => "BAR",
|
|
}
|
|
else
|
|
"NULL"
|
|
else |err| switch (err) {
|
|
error.Fizz => "FIZZ",
|
|
else => return err,
|
|
};
|
|
|
|
const r2 = switch (optional_enum_error_union()) {
|
|
.foo => "FOO",
|
|
.bar => "BAR",
|
|
null => "NULL",
|
|
error.Fizz => "FIZZ",
|
|
anyerror => |err| return err,
|
|
};
|
|
}
|
|
}
|