pkgcraft/
parse.rs

1use std::ffi::c_char;
2
3use pkgcraft::dep::parse;
4
5use crate::macros::*;
6use crate::panic::ffi_catch_panic;
7
8/// Verify a package category name is valid.
9///
10/// Returns NULL on error.
11///
12/// # Safety
13/// The argument be a valid UTF-8 string.
14#[no_mangle]
15pub unsafe extern "C" fn pkgcraft_parse_category(s: *const c_char) -> *const c_char {
16    ffi_catch_panic! {
17        let val = try_str_from_ptr!(s);
18        unwrap_or_panic!(parse::category(val));
19        s
20    }
21}
22
23/// Verify a package name is valid.
24///
25/// Returns NULL on error.
26///
27/// # Safety
28/// The argument be a valid UTF-8 string.
29#[no_mangle]
30pub unsafe extern "C" fn pkgcraft_parse_package(s: *const c_char) -> *const c_char {
31    ffi_catch_panic! {
32        let val = try_str_from_ptr!(s);
33        unwrap_or_panic!(parse::package(val));
34        s
35    }
36}
37
38/// Verify a repository name is valid.
39///
40/// Returns NULL on error.
41///
42/// # Safety
43/// The argument be a valid UTF-8 string.
44#[no_mangle]
45pub unsafe extern "C" fn pkgcraft_parse_repo(s: *const c_char) -> *const c_char {
46    ffi_catch_panic! {
47        let val = try_str_from_ptr!(s);
48        unwrap_or_panic!(parse::repo(val));
49        s
50    }
51}
52
53/// Verify a package USE flag name is valid.
54///
55/// Returns NULL on error.
56///
57/// # Safety
58/// The argument be a valid UTF-8 string.
59#[no_mangle]
60pub unsafe extern "C" fn pkgcraft_parse_use_flag(s: *const c_char) -> *const c_char {
61    ffi_catch_panic! {
62        let val = try_str_from_ptr!(s);
63        unwrap_or_panic!(parse::use_flag(val));
64        s
65    }
66}