aboutsummaryrefslogtreecommitdiff
path: root/exercises/25_errors5.zig
blob: d9e9ce1efbccf67f9965725dbedd11d078e7e526 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//
// Zig has a handy "try" shortcut for this common error handling pattern:
//
//     canFail() catch |err| return err;
//
// which can be more compactly written as:
//
//     try canFail();
//
const std = @import("std");

const MyNumberError = error{
    TooSmall,
    TooBig,
};

pub fn main() void {
    var a: u32 = addFive(44) catch 0;
    var b: u32 = addFive(14) catch 0;
    var c: u32 = addFive(4)  catch 0;

    std.debug.print("a={}, b={}, c={}", .{a,b,c});
}

fn addFive(n: u32) MyNumberError!u32 {
    //
    // This function needs to return any error which might come back from fix().
    // Please use a "try" statement rather than a "catch".
    //
    var x = detect(n);

    return x + 5;
}

fn detect(n: u32) MyNumberError!u32 {
    if (n < 10) return MyNumberError.TooSmall;
    if (n > 20) return MyNumberError.TooBig;
    return n;
}