class CheramiClientImpl implements CheramiClient {

    @Override
    public ListDestinationsResult listDestinations(ListDestinationsRequest request)
            throws BadRequestError, IOException {

        this.throwOnNullRequest(request);

        if (request.getLimit() <= 0) {
            request.setLimit(DEFAULT_PAGE_SIZE);
        }

        ThriftRequest<listDestinations_args> thriftRequest = null;
        ThriftResponse<listDestinations_result> thriftResponse = null;
        try {
            thriftRequest = buildThriftRequest("listDestinations", new listDestinations_args(request));
            thriftResponse = doRemoteCall(thriftRequest);
            listDestinations_result result = thriftResponse.getBody(listDestinations_result.class);
            if (thriftResponse.getResponseCode() == ResponseCode.OK) {
                return result.getSuccess();
            }
            if (result != null && result.isSetRequestError()) {
                throw result.getRequestError();
            }
            throw new IOException("listDestinations failed with unknown error:" + result);
        } finally {
            if (thriftResponse != null) {
                thriftResponse.release();
            }
        }
    }

    private  CheramiClientImpl(ClientOptions options);
    protected  CheramiClientImpl(String host, int port, ClientOptions options);
    protected  CheramiClientImpl(String routerFile, ClientOptions options);

}