mirror of
git://git.psyc.eu/libpsyc
synced 2024-08-15 03:19:02 +00:00
37 lines
1.1 KiB
Rust
37 lines
1.1 KiB
Rust
|
use std::os::raw::{c_char, c_int};
|
||
|
|
||
|
extern "C" {
|
||
|
fn psyc_inherits(sho: *const c_char,
|
||
|
slen: usize,
|
||
|
lon: *const c_char,
|
||
|
llen: usize)
|
||
|
-> c_int;
|
||
|
fn psyc_matches(sho: *const c_char,
|
||
|
slen: usize,
|
||
|
lon: *const c_char,
|
||
|
llen: usize)
|
||
|
-> c_int;
|
||
|
}
|
||
|
|
||
|
pub trait Keyword {
|
||
|
fn keyword(&self) -> &[u8];
|
||
|
|
||
|
fn inherits(&self, other: &[u8]) -> bool {
|
||
|
let keyword_ptr = self.keyword().as_ptr() as *const c_char;
|
||
|
let other_ptr = other.as_ptr() as *const c_char;
|
||
|
let result = unsafe {
|
||
|
psyc_inherits(other_ptr, other.len(), keyword_ptr, self.keyword().len())
|
||
|
};
|
||
|
result == 0
|
||
|
}
|
||
|
|
||
|
fn matches(&self, other: &[u8]) -> bool {
|
||
|
let keyword_ptr = self.keyword().as_ptr() as *const c_char;
|
||
|
let other_ptr = other.as_ptr() as *const c_char;
|
||
|
let result = unsafe {
|
||
|
psyc_matches(other_ptr, other.len(), keyword_ptr, self.keyword().len())
|
||
|
};
|
||
|
result == 0
|
||
|
}
|
||
|
}
|