Crate thrift_pool

Source
Expand description

This library provides a simple way implement bb8 and/or r2d2 Connection Pools for any TThriftClient


§Usage

There are 2 possible use cases

§As a library

If you’re implementing a library that provides a (possibly generated) thrift client, you should implement the ThriftConnection and FromProtocol traits for that client

// A typical generated client looks like this
struct MyThriftClient<Ip: TInputProtocol, Op: TOutputProtocol> {
    i_prot: Ip,
    o_prot: Op,
}

impl<Ip: TInputProtocol, Op: TOutputProtocol> FromProtocol for MyThriftClient<Ip, Op> {
    type InputProtocol = Ip;

    type OutputProtocol = Op;

    fn from_protocol(
        input_protocol: Self::InputProtocol,
        output_protocol: Self::OutputProtocol,
    ) -> Self {
        MyThriftClient {
            i_prot: input_protocol,
            o_prot: output_protocol,
        }
    }
}

impl<Ip: TInputProtocol, Op: TOutputProtocol> ThriftConnection for MyThriftClient<Ip, Op> {
    type Error = thrift::Error;
    fn is_valid(&mut self) -> Result<(), Self::Error> {
       Ok(())
    }
    fn has_broken(&mut self) -> bool {
       false
   }
}

§As an application

If you’re implementing an application that uses a (possibly generated) thrift client that implements FromProtocol and ThriftConnection (see previous section), you can use r2d2 or bb8 (make sure to read their documentations) along with ThriftConnectionManager to create Connection Pools for the client

type Client = MyThriftClient<
    TCompactInputProtocol<TFramedReadTransport<ReadHalf<TTcpChannel>>>,
    TCompactOutputProtocol<TFramedWriteTransport<WriteHalf<TTcpChannel>>>,
>;
  // create a connection manager
  let manager = MakeThriftConnectionFromAddrs::<Client, _>::new("localhost:9090")
                .into_connection_manager();
   
  // we're able to create bb8 and r2d2 Connection Pools
  let bb8 = bb8::Pool::builder().build(manager.clone()).await?;
  let r2d2 = r2d2::Pool::builder().build(manager)?;

  // get a connection
  let conn1 = bb8.get().await?;
  let conn2 = r2d2.get()?;

§Examples

Structs§

MakeThriftConnectionFromAddrs
A MakeThriftConnection that attempts to create new connections from a ToSocketAddrs and a FromProtocol
ThriftConnectionManager
An implementor of bb8::ManageConnection and/or r2d2::ManageConnection. T should a MakeThriftConnection and T::Output should be a ThriftConnection

Traits§

FromProtocol
Create self from a TInputProtocol and a TOutputProtocol
FromRead
Create self from a Read
FromReadTransport
Create self from a TReadTransport
FromWrite
Create self from a Write
FromWriteTransport
Create self from a TWriteTransport
MakeThriftConnection
A trait that creates new ThriftConnections
ThriftConnection
Checks the validity of the connection