#![allow(non_snake_case)]
#[cfg(all(target_family = "wasm", feature = "js-sys"))]
use std::{future::Future, pin::Pin};
use serde_derive::{Deserialize, Serialize};
#[derive(Serialize, Debug, PartialEq, Clone)]
#[serde(rename_all = "lowercase")]
pub struct PdfApiReturn<T: serde::Serialize> {
pub status: usize,
pub data: StatusOrData<T>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
#[serde(untagged)]
pub enum StatusOrData<T: serde::Serialize> {
Ok(T),
Error(String),
}
#[allow(non_snake_case)]
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub fn Pdf_HtmlToDocumentSync(input: String) -> String {
api_inner(&input, crate::wasm::structs::html_to_document)
}
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub fn Pdf_BytesToDocumentSync(input: String) -> String {
api_inner(&input, crate::wasm::structs::bytes_to_document)
}
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub fn Pdf_ResourcesForPageSync(input: String) -> String {
api_inner(&input, crate::wasm::structs::resources_for_page)
}
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub fn Pdf_PageToSvgSync(input: String) -> String {
api_inner(&input, crate::wasm::structs::page_to_svg)
}
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub fn Pdf_DocumentToBytesSync(input: String) -> String {
api_inner(&input, crate::wasm::structs::document_to_bytes)
}
fn api_inner<'a, T, Q>(input: &'a str, f: fn(Q) -> Result<T, String>) -> String
where
T: serde::Serialize,
Q: serde::Deserialize<'a>,
{
serde_json::to_string(&match serde_json::from_str::<Q>(input) {
Ok(input) => match (f)(input) {
Ok(o) => PdfApiReturn {
status: 0,
data: StatusOrData::Ok(o),
},
Err(e) => PdfApiReturn {
status: 2,
data: StatusOrData::Error(e),
},
},
Err(e) => PdfApiReturn {
status: 1,
data: StatusOrData::Error(format!("failed to deserialize input: {e}")),
},
})
.unwrap_or_default()
}
#[cfg(all(target_family = "wasm", feature = "js-sys"))]
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub async fn Pdf_HtmlToDocument(input: String) -> String {
api_inner_async(&input, |x| {
Box::pin(crate::wasm::structs::html_to_document_async(x))
})
.await
}
#[cfg(all(target_family = "wasm", feature = "js-sys"))]
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub async fn Pdf_BytesToDocument(input: String) -> String {
api_inner_async(&input, |x| {
Box::pin(crate::wasm::structs::bytes_to_document_async(x))
})
.await
}
#[cfg(all(target_family = "wasm", feature = "js-sys"))]
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub async fn Pdf_DocumentToBytes(input: String) -> String {
api_inner_async(&input, |x| {
Box::pin(crate::wasm::structs::document_to_bytes_async(x))
})
.await
}
#[cfg(all(target_family = "wasm", feature = "js-sys"))]
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub async fn Pdf_ResourcesForPage(input: String) -> String {
api_inner_async(&input, |x| {
Box::pin(crate::wasm::structs::resources_for_page_async(x))
})
.await
}
#[cfg(all(target_family = "wasm", feature = "js-sys"))]
#[cfg_attr(target_family = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
pub async fn Pdf_PageToSvg(input: String) -> String {
api_inner_async(&input, |x| {
Box::pin(crate::wasm::structs::page_to_svg_async(x))
})
.await
}
#[cfg(all(target_family = "wasm", feature = "js-sys"))]
async fn api_inner_async<T, Q>(
input: &str,
f: fn(Q) -> Pin<Box<dyn Future<Output = Result<T, String>>>>,
) -> String
where
T: serde::Serialize,
Q: for<'de> serde::Deserialize<'de>,
{
match serde_json::from_str::<Q>(input) {
Ok(input_obj) => match f(input_obj).await {
Ok(data) => serde_json::to_string(&PdfApiReturn {
status: 0,
data: StatusOrData::Ok(data),
})
.unwrap_or_default(),
Err(e) => serde_json::to_string(&PdfApiReturn {
status: 2,
data: StatusOrData::<T>::Error(e),
})
.unwrap_or_default(),
},
Err(e) => serde_json::to_string(&PdfApiReturn {
status: 1,
data: StatusOrData::<T>::Error(format!("failed to deserialize input: {}", e)),
})
.unwrap_or_default(),
}
}