[package]
name = "indieweb"
version = "0.10.0"
authors = ["Jacky Alciné <yo@jacky.wtf>"]
description = "A collection of utilities for working with the IndieWeb."
readme = "README.md"
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
keywords = ["indieweb", "webmention", "indieauth", "micropub", "microsub"]
categories = ["web-programming::http-client", "api-bindings", "web-programming"]

[badges]
maintenance = { status = "actively-developed" }

[dependencies]
async-trait = "0.1.82"
base64 = "0.22"
hmac = "0.12"
hex = "0.4"
time = { version = "0.3", features = ["serde", "serde-well-known"] }
futures = "0.3"
http = { version = "1" }
microformats = "0.19.0"
reqwest-middleware = { version = "0.4", optional = true }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_qs = "0"
sha2 = "0.10"
thiserror = "2.0"
tracing = { version = "0.1", features = ["attributes"] }
url = { version = "2.5", features = ["serde"] }
regex = { version = "1.10.6", features = [
  "perf",
  "unicode-bool",
], optional = true, default-features = false }
reqwest = { version = "0.12", optional = true, default-features = false }
miette = { version = "7.2", default-features = false, features = ["derive"] }
secrecy = { version = "0.10", features = ["serde"] }
rand = { version = "0.9", default-features = false, features = ["os_rng"] }
fake = { version = "4", optional = true }
serde_with = "3.12.0"
uuid = { version = "1.0", features = ["v4"] }
iso8601-duration = { version = "0.2", optional = true }
mime = { version = "0.3", optional = true }

[features]
default = ["reqwest", "reaction", "experimental", "reqwest_middleware"]
experimental = [
  "experimental_channels",
  "experimental_syndication",
  "experimental_relation",
  "experimental_websub",
  "experimental_microsub",
  "experimental_vouch",
  "experimental_salmention",
  "experimental_authorship",
]
experimental_channels = []
experimental_relation = []
experimental_syndication = []
experimental_websub = []
experimental_microsub = []
experimental_vouch = []
experimental_salmention = []
experimental_authorship = []
experimental_batch = []
experimental_publish_delay = ["dep:iso8601-duration"]
experimental_media_query = ["dep:mime"]
reaction = ["regex"]
reqwest = ["dep:reqwest", "reqwest/rustls-tls"]
reqwest_middleware = ["dep:reqwest-middleware", "reqwest"]
blocking = ["dep:reqwest", "reqwest/blocking", "reqwest/rustls-tls"]
fake = ["dep:fake"]

[dev-dependencies]
criterion = "0.5"
mockito = "1.5"
env_logger = "0.11"
assert-json-diff = "2.0"
tokio = { version = "1.40", features = ["test-util", "full"] }
reqwest = "0.12"
reqwest-middleware = "0.4"
hex = "0.4"
hmac = "0.12"
sha2 = "0.10"
fake = "4"
tracing-test = "0.2"
miette = { version = "7.2", default-features = true, features = ["fancy"] }

[package.metadata.docs.rs]
all-features = true
default-target = "x86_64-unknown-linux-gnu"
rustdoc-args = ["--cfg", "docsrs"]

[package.metadata.playground]
all-features = true

[[bench]]
name = "micropub_properties"
harness = false
