Skip to main content

visionkit/
vn_document_camera_view_controller.rs

1use 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 VNDocumentCameraViewController;
10
11impl VNDocumentCameraViewController {
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::vn_document_camera_view_controller::vk_vn_document_camera_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(
24                    support_json,
25                    "VNDocumentCameraViewController support info",
26                )
27            }
28        } else {
29            Err(unsafe { error_from_status(status, err_msg) })
30        }
31    }
32
33    pub fn is_available_on_current_platform() -> Result<bool, VisionKitError> {
34        Ok(Self::support_info()?.available_on_current_platform)
35    }
36
37    pub fn new() -> Result<Self, VisionKitError> {
38        let info = Self::support_info()?;
39        if info.available_on_current_platform {
40            Ok(Self)
41        } else {
42            Err(info.unavailable_error())
43        }
44    }
45}