cel_cxx_ffi/common/
source.rs1use crate::absl::Status;
2
3#[cxx::bridge]
4mod ffi {
5 #[namespace = "absl"]
6 unsafe extern "C++" {
7 include!(<absl/status/status.h>);
8 type Status = super::Status;
9 }
10
11 #[namespace = "cel"]
12 unsafe extern "C++" {
13 include!(<common/source.h>);
14 type Source;
15 }
16
17 #[namespace = "rust::cel_cxx"]
18 unsafe extern "C++" {
19 include!("cel-cxx-ffi/include/absl.h");
20 include!("cel-cxx-ffi/include/common/source.h");
21
22 fn Source_new(content: &[u8], description: &str, result: &mut UniquePtr<Source>) -> Status;
23 }
24}
25
26pub use ffi::Source;
27unsafe impl Send for Source {}
28unsafe impl Sync for Source {}
29
30impl Source {
31 pub fn new(content: &[u8], description: &str) -> Result<cxx::UniquePtr<Self>, Status> {
32 let mut result = cxx::UniquePtr::null();
33 let status = ffi::Source_new(content, description, &mut result);
34 if status.is_ok() {
35 Ok(result)
36 } else {
37 Err(status)
38 }
39 }
40}