summaryrefslogtreecommitdiff
path: root/src/Str.zig
blob: 8f49c619206373ee76e2db58cf18cc69b06bcc63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const c = @import("c");
const zpy = @import("root.zig");
const conversion = zpy.conversion;

const Self = @This();

object: zpy.Object,

pub fn fromString(buffer: []const u8) Self {
    return .{
        .object = .fromPtr(c.PyUnicode_FromStringAndSize(@ptrCast(buffer), @intCast(buffer.len)))
    };
}

pub fn asUtf8(self: *Self) zpy.Error![]const u8 {
    var size: c.Py_ssize_t = undefined;
    const string: [*]const u8 = c.PyUnicode_AsUTF8AndSize(self.object.ptr, &size);

    if (size == -1) return error.Exception;

    return string[0..@as(usize, @intCast(size))];
}

pub fn deinit(self: *Self) void {
    self.object.decref();
    self.* = undefined;
}