| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //! Builds libthreema (d'oh!).
- use std::io::Result;
- #[cfg(feature = "uniffi")]
- use uniffi as _;
- fn main() -> Result<()> {
- // Configure and compile protobuf
- println!("cargo:rerun-if-changed=../threema-protocols/src/");
- let mut builder = prost_build::Config::new();
- // Definitions
- // -----------
- // Enums that should be convertable from/to a clap `ValueEnum`.
- let clap_convertable_enums = ["d2m.DeviceSlotState"];
- // Define enums that should be accessible across the FFI boundary.
- let ffi_accessible_enums = ["d2d_sync.WorkAvailabilityStatusCategory"];
- // Apply definitions
- // -----------------
- // General protobuf annotations to apply.
- let builder = builder
- .message_attribute(".", "#[libthreema_macros::protobuf_annotations]")
- .enable_type_names();
- // Apply attributes as required by above definition section.
- let builder = clap_convertable_enums.iter().fold(builder, |builder, path| {
- builder.enum_attribute(path, r#"#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]"#)
- });
- let builder = ffi_accessible_enums.iter().fold(builder, |builder, path| {
- builder.enum_attribute(
- path,
- r#"
- #[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
- #[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
- #[cfg_attr(
- feature = "wasm",
- derive(tsify::Tsify, serde::Serialize, serde::Deserialize),
- serde(rename_all = "kebab-case"),
- tsify(into_wasm_abi, from_wasm_abi)
- )]
- "#,
- )
- });
- builder.compile_protos(
- &[
- "../threema-protocols/src/common.proto",
- "../threema-protocols/src/csp-e2e.proto",
- "../threema-protocols/src/directory.proto",
- "../threema-protocols/src/md-d2d.proto",
- "../threema-protocols/src/md-d2d-sync.proto",
- "../threema-protocols/src/md-d2d-rendezvous.proto",
- "../threema-protocols/src/md-d2m.proto",
- ],
- &["../threema-protocols/src/"],
- )?;
- // Done
- Ok(())
- }
|