#![allow(
clippy::useless_transmute,
clippy::missing_safety_doc,
clippy::ptr_offset_with_cast,
dead_code,
non_camel_case_types,
non_upper_case_globals,
non_snake_case
)]
pub mod bindings {
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
}
#[cfg(test)]
mod tests {
use super::bindings::*;
use rbs_encoding_type_t::RBS_ENCODING_UTF_8;
#[test]
fn test_rbs_parser_bindings() {
let rbs_code = r#"
class User
attr_reader name: String
def initialize: (String) -> void
end
module Authentication
def authenticate: (String, String) -> bool
end
"#;
let bytes = rbs_code.as_bytes();
let start_ptr = bytes.as_ptr() as *const std::os::raw::c_char;
let end_ptr = unsafe { start_ptr.add(bytes.len()) } as *const std::os::raw::c_char;
let rbs_string = unsafe { rbs_string_new(start_ptr, end_ptr) };
let encoding_ptr =
unsafe { &rbs_encodings[RBS_ENCODING_UTF_8 as usize] as *const rbs_encoding_t };
let parser = unsafe { rbs_parser_new(rbs_string, encoding_ptr, 0, bytes.len() as i32) };
let mut signature: *mut rbs_signature_t = std::ptr::null_mut();
let result = unsafe { rbs_parse_signature(parser, &mut signature) };
assert!(result, "Failed to parse RBS signature");
assert!(!signature.is_null(), "Signature should not be null");
unsafe { rbs_parser_free(parser) };
}
}