pdfkit/
action_reset_form.rs1use 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}