code: func (c *Client) FindBuckets(ctx context.Context, filter platform.BucketFilter, opt ...platform.FindOptions) ([]*platform.Bucket, int, error) {
  	if filter.ID != nil {
  		b, err := c.FindBucketByID(ctx, *filter.ID)
  		if err != nil {
  			return nil, 0, err
  		}
  
  		return []*platform.Bucket{b}, 1, nil
  	}
  
  	if filter.Name != nil && filter.OrganizationID != nil {
  		b, err := c.FindBucketByName(ctx, *filter.OrganizationID, *filter.Name)
  		if err != nil {
  			return nil, 0, err
  		}
  
  		return []*platform.Bucket{b}, 1, nil
  	}
  
  	bs := []*platform.Bucket{}
  	err := c.db.View(func(tx *bolt.Tx) error {
  		bkts, err := c.findBuckets(ctx, tx, filter)
  		if err != nil {
  			return err
  		}
  		bs = bkts
  		return nil
  	})
  
  	if err != nil {
  		return nil, 0, err
  	}
  
  	return bs, len(bs), nil
  }
docs: // FindBuckets retrives all buckets that match an arbitrary bucket filter.
  // Filters using ID, or OrganizationID and bucket Name should be efficient.
  // Other filters will do a linear scan across all buckets searching for a match.