Skip to main content

pdfkit/
action_reset_form.rs

1use std::ptr;
2
3use crate::action::{sealed, PdfActionLike};
4use crate::error::{PdfKitError, Result};
5use crate::ffi;
6use crate::handle::ObjectHandle;
7use crate::util::{c_string, parse_json, take_string};
8
9#[derive(Debug, Clone)]
10pub struct PdfActionResetForm {
11    handle: ObjectHandle,
12}
13
14impl PdfActionResetForm {
15    pub(crate) fn from_handle(handle: ObjectHandle) -> Self {
16        Self { handle }
17    }
18
19    pub fn new() -> Result<Self> {
20        let mut out_action = ptr::null_mut();
21        let mut out_error = ptr::null_mut();
22        let status = unsafe { ffi::pdf_action_reset_form_new(&mut out_action, &mut out_error) };
23        crate::util::status_result(status, out_error)?;
24        Ok(Self::from_handle(crate::util::required_handle(
25            out_action,
26            "PDFActionResetForm",
27        )?))
28    }
29
30    pub fn fields(&self) -> Result<Vec<String>> {
31        parse_json(
32            unsafe { ffi::pdf_action_reset_form_fields_json(self.handle.as_ptr()) },
33            "PDFActionResetForm fields",
34        )
35    }
36
37    pub fn set_fields<I, S>(&self, fields: I) -> Result<()>
38    where
39        I: IntoIterator<Item = S>,
40        S: AsRef<str>,
41    {
42        let fields = fields
43            .into_iter()
44            .map(|field| field.as_ref().to_string())
45            .collect::<Vec<_>>();
46        let fields_json = serde_json::to_string(&fields).map_err(|error| {
47            PdfKitError::new(
48                ffi::status::FRAMEWORK,
49                format!("failed to encode PDFActionResetForm fields: {error}"),
50            )
51        })?;
52        let fields_json = c_string(&fields_json)?;
53        let mut out_error = ptr::null_mut();
54        let status = unsafe {
55            ffi::pdf_action_reset_form_set_fields_json(
56                self.handle.as_ptr(),
57                fields_json.as_ptr(),
58                &mut out_error,
59            )
60        };
61        crate::util::status_result(status, out_error)
62    }
63
64    pub fn clear_fields(&self) -> Result<()> {
65        let mut out_error = ptr::null_mut();
66        let status = unsafe {
67            ffi::pdf_action_reset_form_set_fields_json(
68                self.handle.as_ptr(),
69                ptr::null(),
70                &mut out_error,
71            )
72        };
73        crate::util::status_result(status, out_error)
74    }
75
76    #[must_use]
77    pub fn fields_included_are_cleared(&self) -> bool {
78        unsafe { ffi::pdf_action_reset_form_fields_included_are_cleared(self.handle.as_ptr()) != 0 }
79    }
80
81    pub fn set_fields_included_are_cleared(&self, value: bool) {
82        unsafe {
83            ffi::pdf_action_reset_form_set_fields_included_are_cleared(
84                self.handle.as_ptr(),
85                i32::from(value),
86            );
87        }
88    }
89
90    #[must_use]
91    pub fn action_type(&self) -> Option<String> {
92        take_string(unsafe { ffi::pdf_action_reset_form_type_string(self.handle.as_ptr()) })
93    }
94
95    pub(crate) fn as_handle_ptr(&self) -> *mut core::ffi::c_void {
96        self.handle.as_ptr()
97    }
98}
99
100impl sealed::Sealed for PdfActionResetForm {}
101
102impl PdfActionLike for PdfActionResetForm {
103    fn as_action_handle_ptr(&self) -> *mut core::ffi::c_void {
104        self.as_handle_ptr()
105    }
106}