lib/sandbox/src/backend.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 
 3 pub const Policy = enum {
 4     require_strongest,
 5     prefer_strongest,
 6     portable_only,
 7 };
 8 
 9 pub fn policyFromName(value: []const u8) ?Policy {
10     if (nameMatches(value, "require-strongest")) return .require_strongest;
11     if (nameMatches(value, "require_strongest")) return .require_strongest;
12     if (nameMatches(value, "prefer-strongest")) return .prefer_strongest;
13     if (nameMatches(value, "prefer_strongest")) return .prefer_strongest;
14     if (nameMatches(value, "portable-only")) return .portable_only;
15     if (nameMatches(value, "portable_only")) return .portable_only;
16     return null;
17 }
18 
19 pub fn policyName(value: Policy) []const u8 {
20     return switch (value) {
21         .require_strongest => "require-strongest",
22         .prefer_strongest => "prefer-strongest",
23         .portable_only => "portable-only",
24     };
25 }
26 
27 fn nameMatches(value: []const u8, name: []const u8) bool {
28     return std.ascii.eqlIgnoreCase(value, name);
29 }
30 
31 test "backend policy parses setting names" {
32     try std.testing.expectEqual(Policy.require_strongest, policyFromName("require-strongest").?);
33     try std.testing.expectEqual(Policy.require_strongest, policyFromName("require_strongest").?);
34     try std.testing.expectEqual(Policy.prefer_strongest, policyFromName("PREFER-STRONGEST").?);
35     try std.testing.expectEqual(Policy.portable_only, policyFromName("portable-only").?);
36     try std.testing.expectEqualStrings("portable-only", policyName(.portable_only));
37     try std.testing.expect(policyFromName("strong") == null);
38 }