# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[workspace]

members = [
    "arrow",
    "arrow-arith",
    "arrow-array",
    "arrow-avro",
    "arrow-buffer",
    "arrow-cast",
    "arrow-csv",
    "arrow-data",
    "arrow-flight",
    "arrow-flight/gen",
    "arrow-integration-test",
    "arrow-integration-testing",
    "arrow-ipc",
    "arrow-json",
    "arrow-ord",
    "arrow-row",
    "arrow-schema",
    "arrow-select",
    "arrow-string",
    "parquet",
    "parquet_derive",
    "parquet_derive_test",
]

# Enable the version 2 feature resolver, which avoids unifying features for targets that are not being built
#
# Critically this prevents dev-dependencies from enabling features even when not building a target that
# uses dev-dependencies, e.g. the library crate. This in turn ensures that we can catch invalid feature
# flag combinations that would otherwise only surface in dependent crates
#
# Reference - https://doc.rust-lang.org/nightly/cargo/reference/features.html#feature-resolver-version-2
#
resolver = "2"

exclude = [
    # arrow-pyarrow-integration-testing is excluded because it requires different compilation flags, thereby
    # significantly changing how it is compiled within the workspace, causing the whole workspace to be compiled from
    # scratch this way, this is a stand-alone package that compiles independently of the others.
    "arrow-pyarrow-integration-testing",
    # object_store is excluded because it follows a separate release cycle from the other arrow crates
    "object_store"
]

[workspace.package]
version = "50.0.0"
homepage = "https://github.com/apache/arrow-rs"
repository = "https://github.com/apache/arrow-rs"
authors = ["Apache Arrow <dev@arrow.apache.org>"]
license = "Apache-2.0"
keywords = ["arrow"]
include = [
    "benches/*.rs",
    "src/**/*.rs",
    "Cargo.toml",
]
edition = "2021"
rust-version = "1.62"

[workspace.dependencies]
arrow = { version = "50.0.0", path = "./arrow", default-features = false }
arrow-arith = { version = "50.0.0", path = "./arrow-arith" }
arrow-array = { version = "50.0.0", path = "./arrow-array" }
arrow-buffer = { version = "50.0.0", path = "./arrow-buffer" }
arrow-cast = { version = "50.0.0", path = "./arrow-cast" }
arrow-csv = { version = "50.0.0", path = "./arrow-csv" }
arrow-data = { version = "50.0.0", path = "./arrow-data" }
arrow-ipc = { version = "50.0.0", path = "./arrow-ipc" }
arrow-json = { version = "50.0.0", path = "./arrow-json" }
arrow-ord = { version = "50.0.0", path = "./arrow-ord" }
arrow-row = { version = "50.0.0", path = "./arrow-row" }
arrow-schema = { version = "50.0.0", path = "./arrow-schema" }
arrow-select = { version = "50.0.0", path = "./arrow-select" }
arrow-string = { version = "50.0.0", path = "./arrow-string" }
parquet = { version = "50.0.0", path = "./parquet", default-features = false }

chrono = { version = "0.4.31", default-features = false, features = ["clock"] }
