#
# 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 = "rocketmq"
version = "0.1.1"
edition = "2021"
rust-version = "1.61"
authors = [
    "SSpirits <admin@lv5.moe>",
    "Zhanhui Li <lizhanhui@gmail.com>",
]

license = "Apache-2.0"
readme = "./README.md"
repository = "https://github.com/apache/rocketmq-clients/tree/master/rust"
documentation = "https://docs.rs/rocketmq"
description = "Rust client for Apache RocketMQ"
keywords = ["rocketmq", "api", "client", "sdk", "grpc"]

[dependencies]
tokio = { version = "1", features = ["full"] }
tokio-rustls = {version = "0.24.0", features = ["default", "dangerous_configuration"] }
async-trait = "0.1.68"
lazy_static = "1.4"
tonic = {version = "0.9.0", features = ["tls", "default", "channel", "tls-roots"]}
prost = "0.11.8"
prost-types = "0.11.8"

thiserror = "1.0"
anyhow = "1.0.70"
parking_lot = "0.12"
hmac = "0.12"
hostname = "0.3.1"
os_type = "2.6.0"

slog = {version = "2.7.0", features=["max_level_trace", "release_max_level_info"]}
slog-term = "2.9.0"
slog-async = "2.7.0"
slog-json = "2.6.1"

opentelemetry = { version = "0.19.0", features = ["metrics", "rt-tokio"] }
opentelemetry-otlp = { version = "0.12.0", features = ["metrics", "grpc-tonic"] }
minitrace = "0.4"

byteorder = "1"
mac_address = "1.1.4"
hex = "0.4.3"
time = "0.3"
once_cell = "1.9.0"
tokio-stream="0.1.12"

mockall = "0.11.4"
mockall_double= "0.3.0"

siphasher = "0.3.10"

[build-dependencies]
tonic-build = "0.9.0"
which = "4.4.0"
version_check = "0.9.4"
regex = "1.7.3"

[dev-dependencies]
wiremock-grpc = "0.0.3-alpha2"
futures = "0.3"
awaitility = "0.3.0"
