cel_cxx_ffi/common/
source.rs

1use 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}