[package]
edition = "2024"
rust-version = "1.97"
name = "ironic"
version = "1.0.8"
build = false
include = [
"/src/**/*.rs",
"/crates/ironic-*/src/**/*.rs",
"/crates/ironic-cli/README.md",
"/crates/ironic-testing/README.md",
"/crates/ironic/tests/ui/**/*.rs",
"/crates/ironic/tests/ui/**/*.stderr",
"/crates/ironic/tests/ui.rs",
"/crates/ironic/benches/**/*.rs",
"/crates/ironic-cli/tests/**/*.rs",
"/crates/ironic-openapi/tests/**/*.rs",
"/crates/ironic-testing/tests/**/*.rs",
"/tests/**/*.rs",
"/README.md",
"/LICENSE-*",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "A batteries-included, type-safe application framework for Rust"
homepage = "https://github.com/ironic-org/ironic"
documentation = "https://docs.rs/ironic"
readme = "README.md"
keywords = [
"framework",
"web",
"dependency-injection",
"axum",
"openapi",
]
categories = [
"web-programming::http-server",
"development-tools",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/ironic-org/ironic"
[features]
application-services = [
"cache",
"scheduling",
"events",
"realtime",
]
auth = ["dep:argon2"]
authentication = [
"auth",
"jwt",
"oauth",
"sessions",
]
backtrace = []
cache = []
compression = ["dep:tower-http"]
cqrs = []
cron = [
"dep:cron",
"dep:chrono",
]
custom-decorators = []
database = [
"sqlx",
"seaorm",
"diesel",
"mongodb",
"redis",
]
default = [
"hot-reload",
"openapi",
"logging",
]
devtools = ["axum/json"]
diesel = ["dep:diesel"]
distributed = [
"queues",
"microservices",
"cqrs",
"sagas",
"grpc",
"graphql",
]
events = []
graphql = [
"dep:async-graphql",
"dep:async-graphql-derive",
"dep:async-graphql-parser",
"dep:async-graphql-value",
]
grpc = [
"microservices",
"dep:tonic",
]
hot-reload = ["dep:notify"]
jwt = [
"auth",
"dep:jsonwebtoken",
]
logging = [
"dep:chrono",
"dep:tracing-subscriber",
]
metrics = []
microservices = []
mongodb = ["dep:mongodb"]
multipart = ["dep:multer"]
oauth = [
"auth",
"dep:oauth2",
]
openapi = []
plugin-ecosystem = [
"plugins",
"devtools",
]
plugins = []
queues = []
realtime = ["axum/ws"]
redis = ["dep:redis"]
resilience = []
resilience-ext = ["resilience"]
sagas = []
scheduling = []
seaorm = ["dep:sea-orm"]
seaorm-mysql = [
"seaorm",
"sea-orm/sqlx-mysql",
]
seaorm-postgres = [
"seaorm",
"sea-orm/sqlx-postgres",
]
seaorm-sqlite = [
"seaorm",
"sea-orm/sqlx-sqlite",
]
security = [
"security-cors",
"security-rate-limit",
"security-headers",
"security-csrf",
]
security-cors = ["dep:tower-http"]
security-csrf = [
"dep:tower-http",
"dep:uuid",
]
security-headers = ["dep:tower-http"]
security-rate-limit = [
"dep:tower-http",
"dep:redis",
]
serialization = []
sessions = [
"auth",
"dep:getrandom",
]
sqlx = ["dep:sqlx"]
sqlx-mysql = [
"sqlx",
"sqlx/mysql",
]
sqlx-postgres = [
"sqlx",
"sqlx/postgres",
]
sqlx-sqlite = [
"sqlx",
"sqlx/sqlite",
]
static-files = [
"dep:tower-http",
"tower-http/fs",
"tower-http/set-header",
]
telemetry = [
"dep:tracing-subscriber",
"dep:opentelemetry",
"dep:opentelemetry-otlp",
"dep:opentelemetry_sdk",
"dep:tracing-opentelemetry",
]
transport-kafka = ["dep:kafka"]
transport-rabbitmq = ["dep:lapin"]
transport-redis = ["dep:redis"]
uuid = ["dep:uuid"]
validation = ["dep:garde"]
versioning = []
[lib]
name = "ironic"
path = "src/lib.rs"
[[bin]]
name = "ironic"
path = "crates/ironic-cli/src/main.rs"
doc = false
[[test]]
name = "authentication"
path = "tests/authentication.rs"
[[test]]
name = "cli"
path = "crates/ironic-cli/tests/cli.rs"
[[test]]
name = "database-integrations"
path = "tests/database_integrations.rs"
[[test]]
name = "extended-features"
path = "tests/extended_features.rs"
[[test]]
name = "openapi"
path = "crates/ironic-openapi/tests/openapi.rs"
required-features = ["openapi"]
[[test]]
name = "testing"
path = "crates/ironic-testing/tests/testing.rs"
[[test]]
name = "ui"
path = "crates/ironic/tests/ui.rs"
[[bench]]
name = "metrics"
path = "crates/ironic/benches/metrics.rs"
harness = false
required-features = ["metrics"]
[[bench]]
name = "overhead"
path = "crates/ironic/benches/overhead.rs"
harness = false
[dependencies.argon2]
version = "0.5.3"
features = ["std"]
optional = true
[dependencies.async-graphql]
version = "=7.0.16"
features = ["graphiql"]
optional = true
default-features = false
[dependencies.async-graphql-derive]
version = "=7.0.16"
optional = true
[dependencies.async-graphql-parser]
version = "=7.0.16"
optional = true
[dependencies.async-graphql-value]
version = "=7.0.16"
optional = true
[dependencies.axum]
version = "0.8.9"
features = [
"http1",
"tokio",
]
default-features = false
[dependencies.chrono]
version = "0.4.42"
features = ["serde"]
optional = true
[dependencies.clap]
version = "4.5.60"
features = ["derive"]
[dependencies.config]
version = "0.15.19"
features = [
"json",
"toml",
]
default-features = false
[dependencies.convert_case]
version = "0.11.0"
[dependencies.cron]
version = "0.17.0"
optional = true
[dependencies.ctrlc]
version = "3"
[dependencies.diesel]
version = "2.3.8"
features = [
"r2d2",
"32-column-tables",
]
optional = true
default-features = false
[dependencies.futures-util]
version = "0.3.32"
[dependencies.garde]
version = "0.23.0"
features = ["derive"]
optional = true
[dependencies.getrandom]
version = "0.4.3"
optional = true
[dependencies.http]
version = "1.4.0"
[dependencies.ironic-macros]
version = "1.0.8"
[dependencies.jsonwebtoken]
version = "9"
optional = true
default-features = false
[dependencies.kafka]
version = "0.10.0"
features = ["snappy"]
optional = true
default-features = false
[dependencies.lapin]
version = "4.10.0"
features = ["rustls"]
optional = true
default-features = false
[dependencies.mongodb]
version = "3.3.0"
features = [
"rustls-tls",
"dns-resolver",
"bson-3",
"compat-3-3-0",
]
optional = true
default-features = false
[dependencies.multer]
version = "3.1.0"
optional = true
[dependencies.notify]
version = "8.2.0"
optional = true
[dependencies.oauth2]
version = "5.0.0"
features = [
"reqwest",
"rustls-tls",
]
optional = true
default-features = false
[dependencies.opentelemetry]
version = "0.28"
features = ["trace"]
optional = true
default-features = false
[dependencies.opentelemetry-otlp]
version = "0.28"
features = [
"trace",
"grpc-tonic",
]
optional = true
default-features = false
[dependencies.opentelemetry_sdk]
version = "0.28"
features = [
"trace",
"rt-tokio",
]
optional = true
default-features = false
[dependencies.prettyplease]
version = "0.2.37"
[dependencies.quote]
version = "1.0.45"
[dependencies.redis]
version = "1.3.0"
features = [
"aio",
"tokio-comp",
"connection-manager",
]
optional = true
default-features = false
[dependencies.sea-orm]
version = "1.1.20"
features = ["runtime-tokio-rustls"]
optional = true
default-features = false
[dependencies.serde]
version = "1.0.228"
features = ["derive"]
[dependencies.serde_json]
version = "1.0.149"
[dependencies.serde_urlencoded]
version = "0.7.1"
[dependencies.sqlx]
version = "0.9.0"
features = [
"runtime-tokio",
"migrate",
]
optional = true
default-features = false
[dependencies.syn]
version = "2.0.117"
features = ["full"]
[dependencies.thiserror]
version = "2.0.18"
[dependencies.tokio]
version = "1.52.0"
features = [
"macros",
"net",
"rt-multi-thread",
"signal",
"sync",
"time",
]
[dependencies.tonic]
version = "0.14.2"
features = [
"transport",
"codegen",
"router",
]
optional = true
default-features = false
[dependencies.tower]
version = "0.5.3"
features = ["util"]
[dependencies.tower-http]
version = "0.7.0"
features = [
"cors",
"set-header",
"compression-gzip",
"compression-br",
"compression-zstd",
]
optional = true
default-features = false
[dependencies.tracing]
version = "0.1.43"
[dependencies.tracing-opentelemetry]
version = "0.29"
optional = true
default-features = false
[dependencies.tracing-subscriber]
version = "0.3"
features = ["env-filter"]
optional = true
[dependencies.ureq]
version = "3.3.0"
features = ["json"]
[dependencies.uuid]
version = "1.16.0"
features = [
"v4",
"serde",
]
optional = true
[dev-dependencies.tempfile]
version = "3.23.0"
[dev-dependencies.trybuild]
version = "1.0"
[lints.clippy]
module_name_repetitions = "allow"
must_use_candidate = "allow"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
missing_docs = "deny"
unreachable_pub = "warn"
unsafe_code = "forbid"
[lints.rust.rust_2018_idioms]
level = "deny"
priority = -1
[profile.release]
lto = "thin"
codegen-units = 1
strip = "symbols"