   (do-connect  [_ app opts])
   (do-release  [_]))
 
-(defrecord BasicClient  [channel-group bootstrap])
-(defrecord PooledClient [basic-client pool])
-
-(extend-protocol Client
-  BasicClient
+(defrecord BasicClient  [channel-group bootstrap]
+  Client
   (do-connect [client app {host :host port :port :as opts}]
     (let [addr     (mk-socket-addr [host port])
           ch-group (.channel-group client)

     (fn [_]
       (.releaseExternalResources (.bootstrap client)))))

  PooledClient
  (do-connect [client app opts]
    (pool/connect
     (.pool client) app opts
     #(do-connect (.basic-client client) % opts)))

  (do-release [client]
    (do-release (.basic-client client))))

(defn- basic-client
  [opts]

  (do-release client))

(defn connect
  ([app opts]
     (default-client app opts))
  ([client app opts]
     (client app opts)))
