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 }