[workspace] members = [ ".", "fuzz", "rama-cli", "rama-core", "rama-dns", "rama-error", "rama-haproxy", "rama-http", "rama-http-backend", "rama-http-types", "rama-macros", "rama-net", "rama-proxy", "rama-socks5", "rama-tcp", "rama-tls", "rama-ua", "rama-udp", "rama-utils", ] [workspace.package] version = "0.2.0-alpha.3" license = "MIT OR Apache-2.0" edition = "2021" repository = "https://github.com/plabayo/rama" homepage = "https://ramaproxy.org" keywords = ["io", "async", "non-blocking", "service", "rama"] categories = ["asynchronous", "network-programming", "web-programming", "web-programming::http-client", "web-programming::http-server"] authors = ["Glen De Cauwsemaecker "] rust-version = "1.80.0" [workspace.dependencies] async-compression = "0.4" base64 = "0.22" bitflags = "2.4" brotli = "6" bytes = "1" clap = { version = "4.5.15", features = ["derive"] } crossterm = "0.27" flate2 = "1.0" futures-lite = "2.3.0" futures-core = "0.3" h2 = "0.4" headers = "0.4" hex = "0.4" http = "1" http-body = "1" http-body-util = "0.1" http-range-header = "0.4.0" httpdate = "1.0" hyper = "1.4" hyper-util = "0.1.6" boring = "4.9.1" tokio-boring = "4.9.1" ipnet = "2.9.0" itertools = "0.13.0" mime = "0.3.17" mime_guess = { version = "2", default-features = false } paste = "1.0" percent-encoding = "2.1" pin-project-lite = "0.2.13" rustls-pki-types = "^1" proc-macro2 = "1.0" opentelemetry = { version = "0.24", default-features = false, features = [ "trace", ] } nom = "7.1.3" opentelemetry-otlp = { version = "0.17", features = [ "tokio" ] } opentelemetry_sdk = { version = "0.24", default-features = false, features = [ "trace", "rt-tokio", ] } opentelemetry-semantic-conventions = "0.16" quickcheck = "1.0" quote = "1.0" rcgen = "0.13.0" regex = "1.10.3" rustls = { version = "0.23", default-features = false, features = [ "logging", "std", "tls12", "aws_lc_rs", ] } rustls-native-certs = "0.8.0" rustls-pemfile = "2.1" rustversion = "1.0.9" serde = "1.0" serde_json = "1.0" serde_html_form = "0.2" syn = "2.0" sync_wrapper = "1.0" tempfile = "3.10" tokio = "1.39" tokio-graceful = "0.1" tokio-rustls = { version = "0.26", default-features = false, features = [ "logging", "tls12", "aws_lc_rs", ] } tokio-test = "0.4.4" tokio-util = "0.7" tracing = "0.1" tracing-subscriber = "0.3.17" trybuild = "1.0.98" uuid = "1.6" zstd = "0.13" venndb = "0.5.0" unicode-normalization = "0.1.23" iri-string = "0.7.0" escargot = "0.5.12" divan = "0.1.14" webpki-roots = "0.26.1" terminal-prompt = "0.2.3" parking_lot = "0.12.3" const_format = "0.2.32" hickory-resolver = { version = "0.24.1", default-features = false, features = [ "tokio-runtime", ] } arc-swap = "1.7.1" [package] name = "rama" readme = "README.md" documentation = "https://docs.rs/rama" description = "modular service framework" version = { workspace = true } license = { workspace = true } edition = { workspace = true } repository = { workspace = true } homepage = { workspace = true } keywords = { workspace = true } categories = { workspace = true } authors = { workspace = true } rust-version = { workspace = true } [features] default = [] full = [ "telemetry", "compression", "rustls", "boring", "cli", "tcp", "http-full", "proxy-full", ] telemetry = ["rama-core/telemetry", "rama-net/telemetry", "rama-http/telemetry"] compression = ["http", "rama-http/compression"] tls = ["net", "dep:rama-tls", "rama-net/tls", "rama-http/tls", "rama-http-backend/tls"] rustls = ["tls", "rama-tls/rustls", "rama-net/rustls", "rama-http-backend/rustls"] rustls-ring = ["tls", "rama-tls/rustls-ring"] boring = ["tls", "rama-tls/boring", "rama-net/boring", "rama-http-backend/boring"] cli = ["dep:base64", "dep:bytes", "dep:hex", "dep:serde_json", "dep:serde_html_form", "dep:tracing", "dep:tokio", "http"] net = ["dep:rama-net"] dns = ["net", "dep:rama-dns"] tcp = ["dns", "dep:rama-tcp"] http = ["net", "dep:rama-http", "net", "ua", "rama-net/http", "rama-tcp/http"] http-full = ["http", "tcp", "dep:rama-http-backend"] proxy = ["dep:rama-proxy"] haproxy = ["dep:rama-haproxy"] ua = ["dep:rama-ua"] proxy-memory-db = ["proxy", "rama-proxy/memory-db", "rama-net/venndb"] proxy-live-update = ["proxy", "rama-proxy/live-update"] proxy-csv = ["proxy", "rama-proxy/csv"] proxy-full = ["proxy-memory-db", "proxy-live-update", "proxy-csv", "haproxy"] [build-dependencies] rustversion = { workspace = true } [dependencies] base64 = { workspace = true, optional = true } bytes = { workspace = true, optional = true } hex = { workspace = true, optional = true } rama-core = { version = "0.2.0-alpha.3", path = "rama-core" } rama-dns = { version = "0.2.0-alpha.3", path = "rama-dns", optional = true } rama-haproxy = { version = "0.2.0-alpha.3", path = "rama-haproxy", optional = true } rama-http = { version = "0.2.0-alpha.3", path = "rama-http", optional = true } rama-http-backend = { version = "0.2.0-alpha.3", path = "rama-http-backend", optional = true } rama-macros = { version = "0.2.0-alpha.3", path = "rama-macros" } rama-net = { version = "0.2.0-alpha.3", path = "rama-net", optional = true } rama-proxy = { version = "0.2.0-alpha.3", path = "rama-proxy", optional = true } rama-tcp = { version = "0.2.0-alpha.3", path = "rama-tcp", optional = true } rama-tls = { version = "0.2.0-alpha.3", path = "rama-tls", optional = true } rama-ua = { version = "0.2.0-alpha.3", path = "rama-ua", optional = true } rama-utils = { version = "0.2.0-alpha.3", path = "rama-utils" } serde_html_form = { workspace = true, optional = true } serde_json = { workspace = true, optional = true } tokio = { workspace = true, features = ["macros", "io-std"], optional = true } tracing = { workspace = true, optional = true } [dev-dependencies] bytes = { workspace = true } divan = { workspace = true } escargot = { workspace = true } itertools = { workspace = true } opentelemetry-otlp = { workspace = true } opentelemetry_sdk = { workspace = true } regex = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } tokio = { workspace = true, features = ["macros"] } tracing = { workspace = true } tracing-subscriber = { workspace = true, features = ["env-filter"] } [profile.dev.package."*"] opt-level = 3 [profile.dev] debug = false opt-level = 1 [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] [[bench]] name = "ua_parse" harness = false [[example]] name = "http_conn_state" required-features = ["http-full"] [[example]] name = "http_connect_proxy" required-features = ["http-full"] [[example]] name = "http_form" required-features = ["http-full"] [[example]] name = "http_health_check" required-features = ["http-full"] [[example]] name = "http_high_level_client" required-features = ["compression", "http-full"] [[example]] name = "http_k8s_health" required-features = ["http-full"] [[example]] name = "http_key_value_store" required-features = ["compression", "http-full"] [[example]] name = "http_listener_hello" required-features = ["http-full"] [[example]] name = "http_mitm_proxy" required-features = ["http-full", "rustls"] [[example]] name = "http_rate_limit" required-features = ["http-full"] [[example]] name = "http_service_fs" required-features = ["http-full"] [[example]] name = "http_service_hello" required-features = ["compression", "http-full"] [[example]] name = "http_service_match" required-features = ["http-full"] [[example]] name = "http_telemetry" required-features = ["http-full", "telemetry"] [[example]] name = "http_user_agent_classifier" required-features = ["http-full"] [[example]] name = "http_web_service_dir_and_api" required-features = ["compression", "http-full"] [[example]] name = "https_connect_proxy" required-features = ["http-full", "rustls"] [[example]] name = "mtls_tunnel_and_service" required-features = ["http-full", "rustls"] [[example]] name = "tcp_listener_hello" required-features = ["tcp"] [[example]] name = "tcp_listener_layers" required-features = ["tcp"] [[example]] name = "tls_boring_termination" required-features = ["boring", "haproxy", "http-full"] [[example]] name = "tls_termination" required-features = ["haproxy", "http-full", "rustls"]