This library provides a simple way implement bb8
and/or r2d2
Connection Pools
for any TThriftClient
This library is primarily documented on its docs.rs page
Here is a quick example
```rust use thrift::protocol::{TCompactInputProtocol, TCompactOutputProtocol, TInputProtocol, TOutputProtocol}; use thrift::transport::{ ReadHalf, TFramedReadTransport, TFramedWriteTransport, TTcpChannel, WriteHalf, }; use thrift_pool::{MakeThriftConnectionFromAddrs, ThriftConnectionManager, ThriftConnection, FromProtocol};
// A typical generated client
struct MyThriftClient
// implement this trait so that MakeThriftConnectionFromAddrs
can create it
impl
type OutputProtocol = Op;
fn from_protocol(
input_protocol: Self::InputProtocol,
output_protocol: Self::OutputProtocol,
) -> Self {
MyThriftClient {
i_prot: input_protocol,
o_prot: output_protocol,
}
}
}
// implement this trait so that ThriftConnectionManager
can manage it
impl
// the actual connection type
type Client = MyThriftClient<
TCompactInputProtocol
;
// this works because we implemented FromProtocol for the client
// AND
// because the Protocol
and Transport
types used here satisfy the contraints
let manager = ThriftConnectionManager::new(
MakeThriftConnectionFromAddrs::
// this works because we implemented ThriftConnection for the client let pool = r2d2::Pool::builder().build(manager)?;
// this also works after enabling the impl-bb8
feature
let pool = bb8::Pool::builder().build(manager).await?;
// the pool can be used just like in r2d2/bb8 documentation let mut client = pool.get()?; ```