content: [workspace]
  members = [
      "benchmarks",
      "crates/*",
      "xtask"
  ]
  resolver = "2"
  
  [workspace.package]
  version = "0.1.0"
  authors = ["OpenTelemetry"]
  edition = "2024"
  repository = "https://github.com/open-telemetry/otel-arrow"
  license = "Apache-2.0"
  publish = false
  rust-version = "1.87.0"
  
  [package]
  name = "otap-df"
  version = "0.1.0"
  description = "OpenTelemetry Rust Dataflow Engine supporting natively OTLP and OTAP Data Formats"
  edition.workspace = true
  repository.workspace = true
  license.workspace = true
  keywords = ["OpenTelemetry", "OTLP", "OTAP", "Dataflow", "Engine"]
  categories = ["asynchronous", "network-programming"]
  
  [[bin]]
  name = "df_engine"
  path = "src/main.rs"
  
  [dependencies]
  otap-df-config = { path = "crates/config" }
  otap-df-controller = { path = "crates/controller" }
  otap-df-otap = { path = "crates/otap" }
  thiserror.workspace = true
  serde_json.workspace = true
  clap = { version = "4.5.42", features = ["derive"] }
  mimalloc-rust = "0.2.1"
  
  [workspace.dependencies]
  arrow = "56.1"
  arrow-ipc = { version = "56.1", features=["zstd"] }
  ciborium = "0.2.2"
  futures-timer = "3.0"
  http = "1.3"
  humantime-serde = "1.1.1"
  object_store = "0.12.3"
  otel-arrow-rust = { path = "../otel-arrow-rust"}
  parquet = { version = "56.1", default-features = false, features = ["arrow", "async", "object_store"]}
  tempfile = "3"
  thiserror = "2.0.12"
  serde = { version = "1.0.219", features = ["derive", "rc"] }
  serde_cbor = "0.11.2"
  serde_json = { version = "1.0.142" }
  serde_yaml = "0.9.34+deprecated"        # Deprecated, but no good alternative yet
  tokio = { version = "1.46.1", features = ["rt", "time", "net", "io-util", "sync", "macros", "rt-multi-thread", "fs", "io-std"] }
  tokio-util = { version = "0.7.16" }
  uuid = { version = "1.17.0", features = ["v4"] }
  async-trait = "0.1.88"
  futures = "0.3.31"
  log = "0.4"
  criterion = "0.7.0"
  miette = { version="7.6.0", features = ["fancy"] }
  linkme = "0.3.33"
  pretty_assertions = "1.4.1"
  proc-macro2 = "1.0"
  quote = "1.0"
  syn = { version = "2.0", features = ["full"] }
  url = "2.5.7"
  weaver_forge = { git = "https://github.com/open-telemetry/weaver.git", tag = "v0.17.0" }
  weaver_common = { git = "https://github.com/open-telemetry/weaver.git", tag = "v0.17.0"}
  once_cell = "1.20.2"
  flume = { version = "0.11.1", default-features = false, features = ["async"] }
  simdutf8 = "0.1.5"
  slotmap = "1.0.7"
  chrono = { version = "0.4", features = ["serde"] }
  core_affinity = "0.8.3"
  tonic = { version = "0.14", default-features = false, features = [
      "server",
      "channel",
      "router",
      "transport",
      "codegen",
      "zstd",
      "gzip",
      "deflate",
  ] }
  tonic-middleware = "0.4.0"
  tonic-prost = "0.14"
  prost = "0.14"
  socket2 = { version = "0.6.0", features = ["all"] }
  bitflags = "2.9"
  bytemuck = "1.23"
  smallvec = "1.15"
  
  [features]
  default = []
  unsafe-optimizations = ["unchecked-index", "unchecked-arithmetic"]
  unchecked-index = []
  unchecked-arithmetic = []
  
  [workspace.lints.rust]
  # General compatibility lints
  rust_2018_idioms = { level = "warn", priority = -1 }
  rust_2021_compatibility = { level = "warn", priority = -1 }
  rust_2024_compatibility = { level = "warn", priority = -1 }
  future_incompatible = { level = "warn", priority = -1 }
  nonstandard_style = { level = "warn", priority = -1 }
  
  # Strict safety & quality standards
  missing_docs = "deny"
  unsafe_code = "deny"
  unstable_features = "deny"
  unused_import_braces = "deny"
  unused_qualifications = "deny"
  unused_results = "deny"
  trivial_numeric_casts = "deny"
  variant_size_differences = "deny"
  unused_extern_crates = "deny"
  
  # Additional helpful warnings
  unused_lifetimes = "warn"
  semicolon_in_expressions_from_macros = "warn"
  unsafe_op_in_unsafe_fn = "warn"
  unused_macro_rules = "warn"
  
  [workspace.lints.clippy]
  # Strong defaults: deny problematic patterns
  cargo = { level = "deny", priority = -1 }
  correctness = { level = "deny", priority = -1 }
  perf = { level = "deny", priority = -1 }
  complexity = { level = "warn", priority = -1 }
  style = { level = "warn", priority = -1 }
  suspicious = { level = "warn", priority = -1 }
  restriction = { level = "allow", priority = -1 }
  
  # Specific Clippy lint customizations
  unwrap_used = "deny"
  print_stdout = "deny"
  print_stderr = "deny"
  must-use-candidate = "warn"
  await_holding_lock = "warn"
  manual_async_fn = "warn"
  dbg_macro = "warn"
  explicit_into_iter_loop = "warn"
  
  # Explicitly allowed practical exceptions
  multiple_crate_versions = "allow"
  too_many_arguments = "allow"
  type_complexity = "allow"
  wrong_self_convention = "allow"
  module_name_repetitions = "allow"
  
  [workspace.lints.rustdoc]
  broken_intra_doc_links = "deny"
  missing_crate_level_docs = "deny"
  
  [profile.release]
  debug = "line-tables-only"  # minimum required for profiling
  
  # A more in-depth analysis is necessary to determine the optimal parameters for the release profile.
  #[profile.release]
  #lto = "thin"
  #strip = true
  
  [profile.bench]
  inherits = "release"
  # Potentially override lto for faster builds:
  # lto = "thin"
  # Potentially override debug/strip for easier debugging:
  # debug = true
  # strip = "none"
  
  # cargo build --profile release-debug
  [profile.release-debug]
  inherits = "release"
  debug = true  # Or 2 for full debug info
  strip = "none" # Keep symbols and debug info
  panic = "unwind"