# quack_protocol
Rust client-side SDK for DuckDB's experimental Quack remote protocol.
The crate implements:
- DuckDB `BinarySerializer`-compatible primitive, object, logical type, vector, and `DataChunk` codecs.
- Quack connection, prepare/query, fetch, append, disconnect, success, and error messages.
- Async HTTP `POST /quack` transport using `application/duckdb`.
- URI parsing for `localhost:9494`, `quack:host:port`, bracketed IPv6, and direct HTTP(S) URLs.
- SQL literal formatting for positional and named parameters.
```rust
use quack_protocol::{QuackClient, QuackClientOptions, Result};
#[tokio::main]
async fn main() -> Result<()> {
let mut client = QuackClient::connect(
"localhost:9494",
QuackClientOptions {
auth_token: Some("super_secret".to_string()),
..Default::default()
},
)
.await?;
let result = client.query("SELECT 42::INTEGER AS answer").await?;
println!("{:?}", result.rows()?);
client.disconnect().await?;
Ok(())
}
```
Quack is still experimental upstream and not yet covered by a stable official wire spec. This implementation follows DuckDB's `duckdb-quack` extension.