visionkit/
vn_document_camera_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 VNDocumentCameraViewController;
11
12impl VNDocumentCameraViewController {
13 pub fn support_info() -> Result<AreaSupportInfo, VisionKitError> {
15 let mut support_json: *mut c_char = ptr::null_mut();
16 let mut err_msg: *mut c_char = ptr::null_mut();
17 let status = unsafe {
18 ffi::vn_document_camera_view_controller::vk_vn_document_camera_view_controller_support_json(
19 &mut support_json,
20 &mut err_msg,
21 )
22 };
23 if status == ffi::status::OK {
24 unsafe {
25 parse_area_support_info_ptr(
26 support_json,
27 "VNDocumentCameraViewController support info",
28 )
29 }
30 } else {
31 Err(unsafe { error_from_status(status, err_msg) })
32 }
33 }
34
35 pub fn is_available_on_current_platform() -> Result<bool, VisionKitError> {
37 Ok(Self::support_info()?.available_on_current_platform)
38 }
39
40 pub fn new() -> Result<Self, VisionKitError> {
42 let info = Self::support_info()?;
43 if info.available_on_current_platform {
44 Ok(Self)
45 } else {
46 Err(info.unavailable_error())
47 }
48 }
49}