docs: function(conn) {
    this._conn = conn;
    this._logger = conn._logger;
    var delegates = [
      "query",
      "queryMore",
      "create",
      "insert",
      "retrieve",
      "update",
      "upsert",
      "del",
      "delete",
      "destroy",
      "describe",
      "describeGlobal",
      "sobject"
    ];
    delegates.forEach(function(method) {
      this[method] = conn.constructor.prototype[method];
    }, this);
  
    this.cache = new Cache();
  
    var cacheOptions = {
      key: function(type) { return type ? "describe." + type : "describe"; }
    };
    this.describe$ = this.cache.makeCacheable(this.describe, this, cacheOptions);
    this.describe = this.cache.makeResponseCacheable(this.describe, this, cacheOptions);
    this.describeSObject$ = this.describe$;
    this.describeSObject = this.describe;
  
    cacheOptions = { key: 'describeGlobal' };
    this.describeGlobal$ = this.cache.makeCacheable(this.describeGlobal, this, cacheOptions);
    this.describeGlobal = this.cache.makeResponseCacheable(this.describeGlobal, this, cacheOptions);
  
    this.initialize();
  }