pdfium/
javascript_action.rs

1// PDFium-rs -- Modern Rust interface to PDFium, the PDF library from Google
2//
3// Copyright (c) 2025 Martin van der Werff <github (at) newinnovations.nl>
4//
5// This file is part of PDFium-rs.
6//
7// PDFium-rs is free software: you can redistribute it and/or modify it under the terms of
8// the GNU General Public License as published by the Free Software Foundation, either version 3
9// of the License, or (at your option) any later version.
10//
11// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
12// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
13// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
14// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
15// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
16// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
17// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
18// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
20use crate::{
21    error::{PdfiumError, PdfiumResult},
22    lib,
23    pdfium_types::{Handle, JavascriptActionHandle, FPDF_JAVASCRIPT_ACTION},
24};
25
26/// # Rust interface to FPDF_JAVASCRIPT_ACTION
27#[derive(Debug, Clone)]
28pub struct PdfiumJavascriptAction {
29    handle: JavascriptActionHandle,
30}
31
32impl PdfiumJavascriptAction {
33    pub(crate) fn new_from_handle(handle: FPDF_JAVASCRIPT_ACTION) -> PdfiumResult<Self> {
34        if handle.is_null() {
35            Err(PdfiumError::NullHandle)
36        } else {
37            Ok(Self {
38                handle: Handle::new(handle, Some(close_javascript_action)),
39            })
40        }
41    }
42}
43
44impl From<&PdfiumJavascriptAction> for FPDF_JAVASCRIPT_ACTION {
45    fn from(javascript_action: &PdfiumJavascriptAction) -> Self {
46        javascript_action.handle.handle()
47    }
48}
49
50fn close_javascript_action(javascript_action: FPDF_JAVASCRIPT_ACTION) {
51    lib().FPDFDoc_CloseJavaScriptAction(javascript_action);
52}