extern structstd.os.windows.GUID[src]

Fields

Data1: u32
Data2: u16
Data3: u16
Data4: [8]u8

Functions

Functionparse[src]

pub fn parse(s: []const u8) GUID

Parameters

s: []const u8

Source Code

Source code
pub fn parse(s: []const u8) GUID {
    assert(s[0] == '{');
    assert(s[37] == '}');
    return parseNoBraces(s[1 .. s.len - 1]) catch @panic("invalid GUID string");
}

FunctionparseNoBraces[src]

pub fn parseNoBraces(s: []const u8) !GUID

Parameters

s: []const u8

Source Code

Source code
pub fn parseNoBraces(s: []const u8) !GUID {
    assert(s.len == 36);
    assert(s[8] == '-');
    assert(s[13] == '-');
    assert(s[18] == '-');
    assert(s[23] == '-');
    var bytes: [16]u8 = undefined;
    for (hex_offsets, 0..) |hex_offset, i| {
        bytes[i] = (try std.fmt.charToDigit(s[hex_offset], 16)) << 4 |
            try std.fmt.charToDigit(s[hex_offset + 1], 16);
    }
    return @as(GUID, @bitCast(bytes));
}

Source Code

Source code
pub const GUID = extern struct {
    Data1: u32,
    Data2: u16,
    Data3: u16,
    Data4: [8]u8,

    const hex_offsets = switch (builtin.target.cpu.arch.endian()) {
        .big => [16]u6{
            0,  2,  4,  6,
            9,  11, 14, 16,
            19, 21, 24, 26,
            28, 30, 32, 34,
        },
        .little => [16]u6{
            6,  4,  2,  0,
            11, 9,  16, 14,
            19, 21, 24, 26,
            28, 30, 32, 34,
        },
    };

    pub fn parse(s: []const u8) GUID {
        assert(s[0] == '{');
        assert(s[37] == '}');
        return parseNoBraces(s[1 .. s.len - 1]) catch @panic("invalid GUID string");
    }

    pub fn parseNoBraces(s: []const u8) !GUID {
        assert(s.len == 36);
        assert(s[8] == '-');
        assert(s[13] == '-');
        assert(s[18] == '-');
        assert(s[23] == '-');
        var bytes: [16]u8 = undefined;
        for (hex_offsets, 0..) |hex_offset, i| {
            bytes[i] = (try std.fmt.charToDigit(s[hex_offset], 16)) << 4 |
                try std.fmt.charToDigit(s[hex_offset + 1], 16);
        }
        return @as(GUID, @bitCast(bytes));
    }
}