Files

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,
};
}
}