You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
83 lines
2.1 KiB
pub const c_api = @cImport({ |
|
@cInclude("curl/curl.h"); |
|
}); |
|
|
|
pub const Option = enum(c_api.CURLoption) { |
|
write_data = c_api.CURLOPT_WRITEDATA, |
|
url = c_api.CURLOPT_URL, |
|
port = c_api.CURLOPT_PORT, |
|
proxy = c_api.CURLOPT_PROXY, |
|
userpwd = c_api.CURLOPT_USERPWD, |
|
proxy_userpwd = c_api.CURLOPT_PROXYUSERPWD, |
|
range = c_api.CURLOPT_RANGE, |
|
read_data = c_api.CURLOPT_READDATA, |
|
error_buffer = c_api.CURLOPT_ERRORBUFFER, |
|
write_function = c_api.CURLOPT_WRITEFUNCTION, |
|
read_function = c_api.CURLOPT_READFUNCTION, |
|
timeout = c_api.CURLOPT_TIMEOUT, |
|
in_file_size = c_api.CURLOPT_INFILESIZE, |
|
post_fields = c_api.CURLOPT_POSTFIELDS, |
|
referer = c_api.CURLOPT_REFERER, |
|
ftp_port = c_api.CURLOPT_FTPPORT, |
|
user_agent = c_api.CURLOPT_USERAGENT, |
|
low_speed_limit = c_api.CURLOPT_LOW_SPEED_LIMIT, |
|
low_speed_time = c_api.CURLOPT_LOW_SPEED_TIME, |
|
resume_from = c_api.CURLOPT_RESUME_FROM, |
|
cookie = c_api.CURLOPT_COOKIE, |
|
http_header = c_api.CURLOPT_HTTPHEADER, |
|
// ... |
|
}; |
|
|
|
handle: *c_api.CURL, |
|
|
|
pub fn init() ?@This() { |
|
if (c_api.curl_easy_init()) |handle| { |
|
return .{ |
|
.handle = handle, |
|
}; |
|
} else { |
|
return null; |
|
} |
|
} |
|
|
|
pub fn deinit(self: *@This()) void { |
|
c_api.curl_easy_cleanup(self.handle); |
|
} |
|
|
|
pub fn reset(self: *@This()) void { |
|
c_api.curl_easy_reset(self.handle); |
|
} |
|
|
|
pub fn perform(self: *@This()) c_api.CURLcode { |
|
return c_api.curl_easy_perform(self.handle); |
|
} |
|
|
|
pub fn setopt_raw( |
|
self: *@This(), |
|
option: c_api.CURLoption, |
|
args: anytype, |
|
) c_api.CURLcode { |
|
return @call( |
|
.auto, |
|
c_api.curl_easy_setopt, |
|
.{ self.handle, option } ++ args, |
|
); |
|
} |
|
|
|
pub fn setopt( |
|
self: *@This(), |
|
option: Option, |
|
args: anytype, |
|
) c_api.CURLcode { |
|
return self.setopt_raw(@intFromEnum(option), args); |
|
} |
|
|
|
pub const Utils = struct { |
|
const std = @import("std"); |
|
|
|
pub fn array_list_append(ptr: [*]u8, size: usize, nmemb: usize, userdata: *std.ArrayList(u8)) callconv(.C) usize { |
|
_ = size; |
|
userdata.appendSlice(ptr[0..nmemb]) catch return 0; |
|
return nmemb; |
|
} |
|
};
|
|
|