cranpose-services 0.1.21

Multiplatform system services for Cranpose (HTTP, URI, and OS integrations)
Documentation
[package]
name = "cranpose-services"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
authors.workspace = true
keywords.workspace = true
categories.workspace = true
readme = "README.md"
description = "Multiplatform system services for Cranpose (HTTP, URI, and OS integrations)"

[dependencies]
cranpose-core = { workspace = true }
cranpose-macros = { workspace = true }
thiserror = "2.0.18"

[features]
default = []
http-native = ["dep:reqwest", "dep:webpki-root-certs"]
web-http = [
    "dep:futures-util",
    "dep:js-sys",
    "dep:wasm-bindgen",
    "dep:wasm-bindgen-futures",
    "dep:web-sys",
]
uri-native = ["dep:open"]
uri-android = ["dep:webbrowser"]
uri-web = ["dep:web-sys"]
system-theme = []
system-theme-web = ["dep:web-sys"]
# Native desktop file/folder picker (rfd; xdg-portal surfaces GVFS/WebDAV mounts).
file-picker-native = ["dep:rfd"]
# Web file/folder picker (rfd + File System Access).
file-picker-web = [
    "dep:rfd",
    "dep:js-sys",
    "dep:wasm-bindgen",
    "dep:wasm-bindgen-futures",
    "dep:web-sys",
]
# Android (SAF) and iOS (UIDocumentPicker) pickers are provided by the cranpose
# crate's platform backends, which register into `set_platform_file_picker`.

[target.'cfg(all(not(target_arch = "wasm32"), not(target_os = "android")))'.dependencies]
open = { version = "5.3.5", optional = true }

# Desktop file picker (Linux/macOS/Windows). xdg-portal exposes mounted
# locations (GVFS/WebDAV) on Linux. iOS uses its own backend, so exclude it.
[target.'cfg(all(not(target_arch = "wasm32"), not(target_os = "android"), not(target_os = "ios")))'.dependencies]
rfd = { version = "0.17.2", default-features = false, features = ["xdg-portal"], optional = true }

[target.'cfg(target_arch = "wasm32")'.dependencies]
futures-util = { version = "0.3.32", optional = true }
js-sys = { version = "0.3.98", optional = true }
wasm-bindgen = { version = "0.2", optional = true }
wasm-bindgen-futures = { version = "0.4.71", optional = true }
rfd = { version = "0.17.2", default-features = false, optional = true }
web-sys = { version = "0.3", features = [
    "Blob",
    "File",
    "FileList",
    "MediaQueryList",
    "Request",
    "RequestInit",
    "RequestMode",
    "Response",
    "Window",
], optional = true }

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
pollster = "0.4.0"

# Desktop and Android use rustls. iOS uses native-tls (Security.framework): the
# rustls default crypto provider (aws-lc-sys) does not link for the device
# `aarch64-apple-ios` target, and native-tls uses the system trust store.
[target.'cfg(all(not(target_arch = "wasm32"), not(target_os = "ios")))'.dependencies]
reqwest = { version = "0.13.3", default-features = false, features = ["blocking", "rustls"], optional = true }

[target.'cfg(target_os = "ios")'.dependencies]
reqwest = { version = "0.13.3", default-features = false, features = ["blocking", "native-tls"], optional = true }

[target.'cfg(target_os = "android")'.dependencies]
webbrowser = { version = "1.2.1", optional = true }
webpki-root-certs = { version = "1.0.7", optional = true }

[dev-dependencies]
webpki-root-certs = "1.0.7"