Wasm feature gate (#622)

* conditional wasm

* derive ts

* ts export

* incl wasm feature
main
Arif Driessen 2023-05-15 02:34:33 +02:00 committed by GitHub
parent 971fceb2a1
commit fbbca22783
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 124 additions and 74 deletions

View File

@ -17,19 +17,22 @@ keywords = [
name = "docx_rs"
path = "src/lib.rs"
[features]
wasm = ["wasm-bindgen", "ts-rs"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
xml-rs = "0.8.4"
wasm-bindgen = "0.2.78"
thiserror = "1.0"
zip = { version = "0.6.3", default-features = false, features = ["deflate"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_json = {version = "1.0" }
base64 = "0.13.1"
image = { version = "0.24.4", default-features = false, features=["gif", "jpeg", "png", "bmp", "tiff"] }
ts-rs = "6.1"
wasm-bindgen = { version = "0.2.78", optional = true }
ts-rs = { version = "6.1", optional = true }
[dev-dependencies]
pretty_assertions = "1.3.0"
insta = "1.16"
insta = "1.16"

View File

@ -4,8 +4,9 @@ use crate::documents::*;
use crate::types::*;
use crate::xml_builder::*;
#[derive(Serialize, Debug, Clone, PartialEq, ts_rs::TS)]
#[ts(export)]
#[derive(Serialize, Debug, Clone, PartialEq)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct FieldChar {
pub field_char_type: FieldCharType,

View File

@ -1,15 +1,17 @@
use serde::Serialize;
#[derive(Debug, Clone, PartialEq, Serialize, ts_rs::TS)]
#[ts(export)]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct FontSchemeFont {
pub script: String,
pub typeface: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Debug, Clone, PartialEq, Serialize, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct FontGroup {
pub latin: String,
@ -18,8 +20,9 @@ pub struct FontGroup {
pub fonts: Vec<FontSchemeFont>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Debug, Clone, PartialEq, Serialize, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct FontScheme {
pub major_font: FontGroup,

View File

@ -1,8 +1,9 @@
use serde::Serialize;
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_HYPERLINKHYPERLINK_topic_ID0EFYG1.html
#[derive(Serialize, Debug, Clone, PartialEq, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Serialize, Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct InstrHyperlink {
pub target: String,

View File

@ -2,8 +2,9 @@ use serde::Serialize;
use crate::documents::*;
#[derive(Serialize, Debug, Clone, PartialEq, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Serialize, Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
pub struct StyleWithLevel(pub (String, usize));
impl StyleWithLevel {
@ -12,8 +13,9 @@ impl StyleWithLevel {
}
}
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_TOCTOC_topic_ID0ELZO1.html
#[derive(Serialize, Debug, Clone, PartialEq, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Serialize, Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct InstrToC {
// \o If no heading range is specified, all heading levels used in the document are listed.

View File

@ -5,8 +5,9 @@ use crate::documents::*;
use crate::types::*;
use crate::xml_builder::*;
#[derive(Debug, Clone, Serialize, PartialEq, ts_rs::TS)]
#[ts(export)]
#[derive(Debug, Clone, Serialize, PartialEq)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct Pic {
pub id: String,

View File

@ -1,7 +1,8 @@
use serde::Serialize;
#[derive(Serialize, Debug, Clone, PartialEq, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Serialize, Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct Shape {
#[serde(skip_serializing_if = "Option::is_none")]
@ -11,8 +12,9 @@ pub struct Shape {
}
// Experimental, For now reader only.
#[derive(Serialize, Debug, Clone, PartialEq, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Serialize, Debug, Clone, PartialEq, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct ImageData {
pub id: String,

View File

@ -1,12 +1,13 @@
use wasm_bindgen::prelude::*;
use serde::Serialize;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::*;
use crate::documents::BuildXML;
use crate::types::*;
use crate::xml_builder::*;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Serialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct TableCellProperty {

View File

@ -1,4 +1,5 @@
use serde::Serialize;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::*;
@ -6,7 +7,7 @@ use crate::documents::BuildXML;
use crate::types::*;
use crate::xml_builder::*;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TableProperty {

View File

@ -2,8 +2,9 @@ use serde::Serialize;
use super::*;
#[derive(Debug, Clone, PartialEq, Serialize, Default, ts_rs::TS)]
#[ts(export)]
#[derive(Debug, Clone, PartialEq, Serialize, Default)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub struct Theme {
pub font_schema: FontScheme,

View File

@ -1,10 +1,11 @@
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug)]
pub enum AlignmentType {
Both,

View File

@ -1,7 +1,8 @@
use serde::Serialize;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum TableBorderPosition {
@ -13,7 +14,7 @@ pub enum TableBorderPosition {
InsideV,
}
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum TableCellBorderPosition {

View File

@ -3,12 +3,13 @@
//
use serde::{Deserialize, Serialize};
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum BorderType {

View File

@ -6,11 +6,12 @@ use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
pub enum BreakType {
Page,

View File

@ -2,11 +2,12 @@ use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum DocGridType {

View File

@ -1,20 +1,23 @@
use serde::Serialize;
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[derive(Debug, Clone, Copy, Serialize, PartialEq, ts_rs::TS)]
#[ts(export)]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, Copy, Serialize, PartialEq)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub enum DrawingPositionType {
Anchor,
Inline,
}
#[wasm_bindgen]
#[derive(Debug, Clone, Copy, Serialize, PartialEq, ts_rs::TS)]
#[ts(export)]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, Copy, Serialize, PartialEq)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub enum PicAlign {
Left,
@ -36,8 +39,9 @@ impl fmt::Display for PicAlign {
}
}
#[derive(Debug, Clone, Copy, Serialize, PartialEq, ts_rs::TS)]
#[ts(export)]
#[derive(Debug, Clone, Copy, Serialize, PartialEq)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub enum DrawingPosition {
Offset(i32),

View File

@ -5,13 +5,15 @@ use serde::{Deserialize, Serialize};
//
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, ts_rs::TS)]
#[ts(export)]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub enum FieldCharType {
Begin,

View File

@ -1,7 +1,8 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug)]
pub enum FontPitchType {
Default,

View File

@ -1,4 +1,5 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use serde::Serialize;
@ -6,7 +7,7 @@ use serde::Serialize;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, Copy, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum HeightRule {

View File

@ -1,4 +1,5 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use serde::Serialize;
@ -6,10 +7,11 @@ use serde::Serialize;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[derive(Debug, Clone, PartialEq, Serialize, ts_rs::TS)]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[serde(rename_all = "camelCase")]
#[ts(export)]
#[cfg_attr(feature = "wasm", ts(export))]
pub enum HyperlinkType {
Anchor,
External,

View File

@ -1,4 +1,5 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use serde::Serialize;
@ -6,7 +7,7 @@ use serde::Serialize;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum LevelSuffixType {

View File

@ -2,9 +2,10 @@ use crate::types::errors;
use crate::TypeError;
use serde::*;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum LineSpacingType {

View File

@ -2,11 +2,12 @@ use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum PageOrientationType {

View File

@ -1,4 +1,5 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use serde::Serialize;
@ -7,9 +8,10 @@ use super::errors;
use std::str::FromStr;
// @See: 20.4.3.4 ST_RelFromH (Horizontal Relative Positioning)
#[wasm_bindgen]
#[derive(Debug, Clone, Copy, PartialEq, Serialize, ts_rs::TS)]
#[ts(export)]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, Copy, PartialEq, Serialize)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub enum RelativeFromHType {
/// Specifies that the horizontal positioning shall be
@ -80,9 +82,10 @@ impl FromStr for RelativeFromHType {
}
}
#[wasm_bindgen]
#[derive(Debug, Clone, Copy, PartialEq, Serialize, ts_rs::TS)]
#[ts(export)]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, Copy, PartialEq, Serialize)]
#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
#[cfg_attr(feature = "wasm", ts(export))]
#[serde(rename_all = "camelCase")]
pub enum RelativeFromVType {
BottomMargin,

View File

@ -11,11 +11,12 @@ use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum SectionType {

View File

@ -2,6 +2,7 @@ use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
@ -46,7 +47,7 @@ use super::errors;
<xsd:enumeration value="pct90"/>
<xsd:enumeration value="pct95"/>
*/
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum ShdType {

View File

@ -1,3 +1,4 @@
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use serde::ser::{SerializeStruct, Serializer};
@ -11,7 +12,7 @@ pub enum SpecialIndentType {
Hanging(i32),
}
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Serialize, Copy, Clone, Debug)]
pub enum SpecialIndentKind {
FirstLine,

View File

@ -1,11 +1,12 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
use serde::Serialize;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, PartialEq, Serialize, Copy)]
#[serde(rename_all = "camelCase")]
pub enum StyleType {

View File

@ -2,11 +2,12 @@ use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum TabLeaderType {

View File

@ -2,11 +2,12 @@ use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum TabValueType {

View File

@ -1,10 +1,11 @@
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug)]
pub enum TableAlignmentType {
Center,

View File

@ -1,11 +1,12 @@
use serde::{Deserialize, Serialize};
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum TableLayoutType {

View File

@ -1,4 +1,5 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use serde::Serialize;
@ -8,7 +9,7 @@ use std::str::FromStr;
// ST_TextDirection defines `lr`, `lrV`, `rl`, `rlV`, `tb`, `tbV`.
// However Microsoft word use `tbRlV`, `tbRl`, `btLr`, `lrTbV`.
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Debug, Clone, Copy, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum TextDirectionType {

View File

@ -1,10 +1,11 @@
use std::fmt;
use std::str::FromStr;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum VertAlignType {
Baseline,

View File

@ -1,10 +1,11 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum VAlignType {
Top,

View File

@ -1,10 +1,11 @@
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum VMergeType {
Continue,

View File

@ -1,11 +1,12 @@
use serde::Serialize;
use std::fmt;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
use super::errors;
use std::str::FromStr;
#[wasm_bindgen]
#[cfg_attr(feature = "wasm", wasm_bindgen)]
#[derive(Copy, Clone, Debug, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum WidthType {

View File

@ -12,4 +12,4 @@ crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2.78"
console_error_panic_hook = "0.1.7"
docx-rs= { path = "../docx-core" }
docx-rs= { path = "../docx-core", features = ["wasm"] }