// // A common case for errors is a situation where we're expecting to // have a value OR something has gone wrong. Take this example: // // var text: Text = getText("foo.txt"); // // What happens if getText() can't find "foo.txt"? How do we express // this in Zig? // // Zig lets us make what's called an "error union" which is a value // which could either be a regular value OR an error from a set: // // var text: MyErrorSet!Text = getText("foo.txt"); // // For now, let's just see if we can try making an error union! // const std = @import("std"); const MyNumberError = error{TooSmall}; fn foo() u32!u16 { // unions of any type are allowed it seems return @intCast(u32, 12); } pub fn main() void { var my_number: MyNumberError!u16 = 5; // Looks like my_number will need to either store a number OR // an error. Can you set the type correctly above? my_number = MyNumberError.TooSmall; std.debug.print("I compiled!\n", .{}); }