From 335a78f8f5ef8b86922dc241422acb033e0b3b2a Mon Sep 17 00:00:00 2001 From: Nuno Mendes <98030270+nm-remarkable@users.noreply.github.com> Date: Sun, 15 Sep 2024 20:14:49 +0200 Subject: 108: Add a exercise for a labeled switch --- exercises/108_labeled_switch.zig | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 exercises/108_labeled_switch.zig (limited to 'exercises') diff --git a/exercises/108_labeled_switch.zig b/exercises/108_labeled_switch.zig new file mode 100644 index 0000000..623e359 --- /dev/null +++ b/exercises/108_labeled_switch.zig @@ -0,0 +1,34 @@ +// +// A labeled switch in zig allows the usage of continue and break +// just like loops, these allow you to create very concise +// Finite State Automata to represent state transitions +// +// foo: switch (state) { +// 1 => continue :foo 2, +// 2 => continue :foo 3, +// 3 => return, +// 4 => {}, +// ... +// } +// +const std = @import("std"); + +const PullRequestState = enum { + Draft, + InReview, + Approved, + Rejected, + Merged, +}; + +pub fn main() void { + // Something is wrong, it seems your Pull Request can never be merged + // try to fix it! + pr: switch (@as(PullRequestState, PullRequestState.Draft)) { + PullRequestState.Draft => continue :pr PullRequestState.InReview, + PullRequestState.InReview => continue :pr PullRequestState.Rejected, + PullRequestState.Approved => continue :pr PullRequestState.Merged, + PullRequestState.Rejected => std.debug.print("The pull request has been rejected", .{}), + PullRequestState.Merged => std.debug.print("The pull request has been merged", .{}), + } +} -- cgit v1.2.3