Function getNamespacePrefix [src]

If T is u16, then path should be encoded as WTF-16LE.

Prototype

pub fn getNamespacePrefix(comptime T: type, path: []const T) NamespacePrefix

Parameters

T: typepath: []const T

Example

test getNamespacePrefix { try std.testing.expectEqual(NamespacePrefix.none, getNamespacePrefix(u8, "")); try std.testing.expectEqual(NamespacePrefix.nt, getNamespacePrefix(u8, "\\??\\")); try std.testing.expectEqual(NamespacePrefix.none, getNamespacePrefix(u8, "/??/")); try std.testing.expectEqual(NamespacePrefix.none, getNamespacePrefix(u8, "/??\\")); try std.testing.expectEqual(NamespacePrefix.none, getNamespacePrefix(u8, "\\?\\\\")); try std.testing.expectEqual(NamespacePrefix.local_device, getNamespacePrefix(u8, "\\\\.\\")); try std.testing.expectEqual(NamespacePrefix.local_device, getNamespacePrefix(u8, "\\\\./")); try std.testing.expectEqual(NamespacePrefix.local_device, getNamespacePrefix(u8, "/\\./")); try std.testing.expectEqual(NamespacePrefix.local_device, getNamespacePrefix(u8, "//./")); try std.testing.expectEqual(NamespacePrefix.none, getNamespacePrefix(u8, "/.//")); try std.testing.expectEqual(NamespacePrefix.verbatim, getNamespacePrefix(u8, "\\\\?\\")); try std.testing.expectEqual(NamespacePrefix.fake_verbatim, getNamespacePrefix(u8, "\\/?\\")); try std.testing.expectEqual(NamespacePrefix.fake_verbatim, getNamespacePrefix(u8, "\\/?/")); try std.testing.expectEqual(NamespacePrefix.fake_verbatim, getNamespacePrefix(u8, "//?/")); }

Source

pub fn getNamespacePrefix(comptime T: type, path: []const T) NamespacePrefix { if (path.len < 4) return .none; var all_backslash = switch (mem.littleToNative(T, path[0])) { '\\' => true, '/' => false, else => return .none, }; all_backslash = all_backslash and switch (mem.littleToNative(T, path[3])) { '\\' => true, '/' => false, else => return .none, }; switch (mem.littleToNative(T, path[1])) { '?' => if (mem.littleToNative(T, path[2]) == '?' and all_backslash) return .nt else return .none, '\\' => {}, '/' => all_backslash = false, else => return .none, } return switch (mem.littleToNative(T, path[2])) { '?' => if (all_backslash) .verbatim else .fake_verbatim, '.' => .local_device, else => .none, }; }