# 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.

[package]
name = "opendal-ruby"
publish = false

authors = ["Apache OpenDAL <dev@opendal.apache.org>"]
edition = "2024"
homepage = "https://opendal.apache.org/"
license = "Apache-2.0"
repository = "https://github.com/apache/opendal"
rust-version = "1.85"
version = "0.1.6-rc.2"                                # updates this version to bump Rubygem version during release process

[lib]
crate-type = ["cdylib"]
doc = false
name = "opendal_ruby"

[dependencies]
magnus = { version = "0.8", features = ["bytes", "io"] }
# 1. we don't use published core but a local copy
# 2. for a source release, this path must be the local "./core".
#   we set it via rake copy_core. Read more in:
#     - Rakefile
#     - opendal.gemspec
opendal = { version = ">=0", path = "../../core", features = [
  "blocking",
  "layers-throttle",
  # These are default features before v0.46. TODO: change to optional features
  "services-azblob",
  "services-azdls",
  "services-cos",
  "services-fs",
  "services-gcs",
  "services-ghac",
  "services-http",
  "services-ipmfs",
  "services-memory",
  "services-obs",
  "services-oss",
  "services-s3",
  "services-webdav",
  "services-webhdfs",
  "services-azfile",
] }
rb-sys = { version = "0.9.110", default-features = false }
# should be in sync with opendal
bytes = "1.6"
tokio = { version = "1", features = ["full"] }

[build-dependencies]
rb-sys-env = "0.1.2"
