[workspace]
members = [".", "crates/live-tests", "crates/macros", "crates/test-support"]
default-members = [".", "crates/macros", "crates/test-support"]
exclude = ["fuzz"]
resolver = "3"
[workspace.package]
edition = "2024"
rust-version = "1.98"
license = "Apache-2.0"
repository = "https://github.com/zchee/typesafe-sdk-rust"
[workspace.lints.rust]
unsafe_code = "forbid"
missing_docs = "warn"
missing_debug_implementations = "warn"
unreachable_pub = "warn"
[workspace.lints.clippy]
unwrap_used = "deny"
[workspace.dependencies]
bytes = "1.12.1"
compact_str = { version = "0.10.0", default-features = false, features = ["std"] }
fastrand = "2.5.0"
http = "1.5.0"
http-body = "1.1.0"
http-body-util = "0.1.5"
httpdate = "1.0.3"
hyper = { version = "1.11.1", features = ["client", "http1", "http2"] }
hyper-rustls = { version = "0.27.9", default-features = false, features = [
"http1",
"http2",
"tls12",
"aws-lc-rs",
] }
hyper-util = { version = "0.1.20", features = [
"client-legacy",
"http1",
"http2",
"tokio",
] }
proc-macro2 = "1.0.107"
quote = "1.0.47"
rustls = "0.23.45"
rustls-platform-verifier = "0.7.0"
secrecy = "0.10.3"
serde = { version = "1.0.229", features = ["derive"] }
sonic-rs = "0.5.10"
syn = { version = "3.0.6", default-features = false, features = [
"derive",
"parsing",
"printing",
"proc-macro",
] }
thiserror = "2.0.20"
tokio = { version = "1.53.1", features = ["rt", "time"] }
tokio-rustls = { version = "0.26.5", default-features = false, features = [
"aws_lc_rs",
"logging",
"tls12",
] }
tower-service = "0.3.3"
tracing = "0.1.44"
codspeed-divan-compat = "5.0.2"
dhat = "0.3.3"
proptest = "1.11.0"
rcgen = { version = "0.14.10", default-features = false, features = [
"aws_lc_rs",
"crypto",
] }
serde_json = { version = "1.0.151", features = ["float_roundtrip", "raw_value"] }
serde_path_to_error = "0.1.20"
trybuild = "1.0.121"
[package]
name = "typesafe-sdk-rust"
version = "0.2.0"
description = "Async Rust SDK for the TypeSafe AI System One API"
readme = "README.md"
keywords = ["typesafe", "ai", "llm", "sdk", "async"]
categories = ["api-bindings", "asynchronous"]
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
include = ["/src", "/examples", "/README.md", "/LICENSE", "/LICENSE-THIRD-PARTY"]
[lib]
name = "typesafe_sdk"
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[features]
default = ["hyper", "macros", "tracing"]
hyper = ["dep:hyper", "dep:hyper-rustls", "dep:hyper-util", "dep:rustls", "dep:rustls-platform-verifier"]
macros = ["dep:typesafe-sdk-rust-macros"]
tracing = ["dep:tracing"]
sonic = ["dep:sonic-rs"]
internals = []
[dependencies]
bytes = { workspace = true }
compact_str = { workspace = true }
fastrand = { workspace = true }
http = { workspace = true }
http-body = { workspace = true }
http-body-util = { workspace = true }
httpdate = { workspace = true }
hyper = { workspace = true, optional = true }
hyper-rustls = { workspace = true, optional = true }
hyper-util = { workspace = true, optional = true }
rustls = { workspace = true, optional = true }
rustls-platform-verifier = { workspace = true, optional = true }
secrecy = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
serde_path_to_error = { workspace = true }
sonic-rs = { workspace = true, optional = true }
thiserror = { workspace = true }
tokio = { workspace = true }
tower-service = { workspace = true }
tracing = { workspace = true, optional = true }
typesafe-sdk-rust-macros = { version = "=0.1.0", path = "crates/macros", optional = true }
[dev-dependencies]
codspeed-divan-compat = { workspace = true }
dhat = { workspace = true }
proptest = { workspace = true }
sonic-rs = { workspace = true }
tokio = { workspace = true, features = ["io-util", "macros", "net", "rt-multi-thread", "sync", "test-util"] }
trybuild = { workspace = true }
typesafe-sdk-rust-test-support = { path = "crates/test-support" }
[[test]]
name = "alloc_encode"
required-features = ["internals"]
[[test]]
name = "alloc_call"
required-features = ["internals"]
[[test]]
name = "alloc_decode"
required-features = ["internals"]
[[test]]
name = "differential"
required-features = ["internals"]
[[test]]
name = "client"
required-features = ["hyper"]
[[test]]
name = "retry"
required-features = ["hyper"]
[[test]]
name = "models"
required-features = ["hyper"]
[[test]]
name = "connection_reuse"
required-features = ["hyper"]
[[test]]
name = "malformed_body"
required-features = ["hyper"]
[[test]]
name = "derive"
required-features = ["macros", "hyper"]
[[test]]
name = "alloc_derive"
required-features = ["internals", "macros"]
[[example]]
name = "typed_answers"
required-features = ["macros", "hyper"]
[[example]]
name = "quickstart"
required-features = ["hyper"]
[[example]]
name = "concurrency"
required-features = ["hyper"]
[[bench]]
name = "sdk"
harness = false
required-features = ["internals", "macros"]
[[bench]]
name = "loopback"
harness = false
required-features = ["hyper"]
[lints]
workspace = true