force 0.4.0

Production-ready Salesforce Platform API client with REST and Bulk API 2.0 support
Documentation
[package]
name = "force"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
description = "Production-ready Salesforce Platform API client with REST and Bulk API 2.0 support"
keywords = ["salesforce", "api", "rest", "bulk", "crm"]
categories = ["api-bindings", "web-programming"]
documentation = "https://docs.rs/force"
homepage = "https://github.com/madmax983/force-rs"
readme = "../../README.md"

[lints]
workspace = true

[dependencies]
# Core dependencies (always compiled)
tokio = { workspace = true }
reqwest = { workspace = true, features = ["stream"] }
serde = { workspace = true }
serde_json = { workspace = true }
chrono = { workspace = true }
thiserror = { workspace = true }
secrecy = { workspace = true }
base64 = { workspace = true }
url.workspace = true
tracing = { workspace = true }
futures = { workspace = true }
async-trait = { workspace = true }
bytes = { workspace = true }
percent-encoding = { workspace = true }

# Feature-gated dependencies
jsonwebtoken = { workspace = true, optional = true }
csv = { workspace = true, optional = true }
wiremock = { workspace = true, optional = true }
sha2 = { workspace = true, optional = true }
getrandom = { workspace = true, optional = true }
uuid = { version = "1", features = ["v4"], optional = true }
quick-xml = { workspace = true, optional = true }

[dev-dependencies]
loom = "0.7"
tokio-test = "0.4"
anyhow = { workspace = true }
wiremock = { workspace = true }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
proptest = "1.5"
criterion = { workspace = true }

[features]
default = ["rest"]
files = ["rest", "reqwest/multipart"]

# Platform API surfaces
rest = []
tooling = []
bulk = ["dep:csv"]
composite = ["rest"]
composite_graph = ["composite"]

# Capability surfaces
schema = ["rest"]
data_utility = ["composite"]

# Auth flows
jwt = ["dep:jsonwebtoken"]
username_password = []
# OAuth 2.0 Authorization Code + PKCE flow
auth_code = ["dep:sha2", "dep:getrandom"]

# Testing utilities
mock = ["dep:wiremock"]

# UI API surface
ui = []

# GraphQL API surface
graphql = []

# Data Cloud API surface
data_cloud = []

# Apex REST API surface (custom Apex REST endpoints)
apex_rest = []

# Salesforce CPQ API surface
cpq = ["apex_rest"]

# Consent & Portability API surface (GDPR/CCPA)
consent = []

# Agentforce API surfaces (api.salesforce.com host)
models = []
agent_api = ["dep:uuid"]
agentforce = ["models", "agent_api"]

# Account Engagement (Pardot) API v5 surface
account_engagement = []

# Reports & Dashboards (Analytics) REST API surface
analytics = []

# SOAP Partner API surface
soap = ["dep:quick-xml"]

# Internal-only: exposes crate-private hot-path functions to benchmarks.
# Not part of the public API; never enable in downstream builds.
bench-internals = ["soap"]

# Meta features
full = ["rest", "files", "bulk", "composite", "tooling", "jwt", "auth_code", "ui", "graphql", "data_cloud", "apex_rest", "consent", "models", "agent_api", "account_engagement", "analytics", "soap"]
all = ["full", "schema", "data_utility", "composite_graph", "cpq"]

[[example]]
name = "query_plan"
required-features = ["rest"]

[[example]]
name = "data_dictionary"
required-features = ["schema"]

[[example]]
name = "generate_struct"
required-features = ["schema"]

[[example]]
name = "soql_mass_op"
required-features = ["composite"]

[[example]]
name = "tooling"
required-features = ["tooling"]

[[example]]
name = "ui_api"
required-features = ["ui"]

[[example]]
name = "graphql"
required-features = ["graphql"]

[[example]]
name = "auth_code_pkce"
required-features = ["auth_code"]

[[bench]]
name = "soap_bench"
harness = false
required-features = ["soap", "bench-internals"]