visionkit/
data_scanner_view_controller.rs1use core::ffi::c_char;
2use core::ptr;
3
4use crate::error::VisionKitError;
5use crate::ffi;
6use crate::private::{error_from_status, parse_area_support_info_ptr};
7use crate::support::AreaSupportInfo;
8
9pub struct DataScannerViewController;
10
11impl DataScannerViewController {
12 pub fn support_info() -> Result<AreaSupportInfo, VisionKitError> {
13 let mut support_json: *mut c_char = ptr::null_mut();
14 let mut err_msg: *mut c_char = ptr::null_mut();
15 let status = unsafe {
16 ffi::data_scanner_view_controller::vk_data_scanner_view_controller_support_json(
17 &mut support_json,
18 &mut err_msg,
19 )
20 };
21 if status == ffi::status::OK {
22 unsafe {
23 parse_area_support_info_ptr(support_json, "DataScannerViewController support info")
24 }
25 } else {
26 Err(unsafe { error_from_status(status, err_msg) })
27 }
28 }
29
30 pub fn is_available_on_current_platform() -> Result<bool, VisionKitError> {
31 Ok(Self::support_info()?.available_on_current_platform)
32 }
33
34 pub fn new() -> Result<Self, VisionKitError> {
35 let info = Self::support_info()?;
36 if info.available_on_current_platform {
37 Ok(Self)
38 } else {
39 Err(info.unavailable_error())
40 }
41 }
42}