{{&methodName}}(parameters: {
{{#parameters}}{{^isSingleton}}'{{&camelCaseName}}'{{&cardinality}}: {{> type}},
{{/isSingleton}}{{/parameters}}
    $queryParameters?: any,
}): Promise<{{returnType}}> {
    let path = '{{&path}}';
    let body: any;
    let queryParameters: any = {};
    let headers: any = {};
    let form: any = {};
    return new Promise((resolve, reject) => {
{{#headers}}
    headers['{{&name}}'] = {{&value}};
{{/headers}}

{{#parameters}}

    {{#isQueryParameter}}
        {{#isSingleton}}
            queryParameters['{{&name}}'] = '{{&singleton}}';
        {{/isSingleton}}
        {{^isSingleton}}
            {{#isPatternType}}
                Object.keys(parameters).forEach((parameterName) => {
                    if(new RegExp('{{&pattern}}').test(parameterName)){
                        queryParameters[parameterName] = parameters[parameterName];
                    }
                });
            {{/isPatternType}}
            {{^isPatternType}}
                if(parameters['{{&camelCaseName}}'] !== undefined){
                    queryParameters['{{&name}}'] = parameters['{{&camelCaseName}}'];
                }
            {{/isPatternType}}
        {{/isSingleton}}
    {{/isQueryParameter}}

    {{#isHeaderParameter}}
        {{#isSingleton}}
            headers['{{&name}}'] = '{{&singleton}}';
        {{/isSingleton}}
        {{^isSingleton}}
            if(parameters['{{&camelCaseName}}'] !== undefined){
                headers['{{&name}}'] = parameters['{{&camelCaseName}}'];
            }
        {{/isSingleton}}
    {{/isHeaderParameter}}

    {{#isBodyParameter}}
        if(parameters['{{&camelCaseName}}'] !== undefined){
            body = parameters['{{&camelCaseName}}'];
        }
    {{/isBodyParameter}}

    {{#isFormParameter}}
        {{#isSingleton}}
            form['{{&name}}'] = '{{&singleton}}';
        {{/isSingleton}}
        {{^isSingleton}}
            if(parameters['{{&camelCaseName}}'] !== undefined){
                form['{{&name}}'] = parameters['{{&camelCaseName}}'];
            }
        {{/isSingleton}}
    {{/isFormParameter}}

    {{#required}}
        if(parameters['{{&camelCaseName}}'] === undefined){
            reject(new Error('Missing required {{&paramType}} parameter: {{&camelCaseName}}'));
            return;
        }
    {{/required}}

    {{#isPathParameter}}
        path = path.replace('{{=<% %>=}}{<%&name%>}<%={{ }}=%>', parameters['{{&camelCaseName}}']+'');
    {{/isPathParameter}}

{{/parameters}}

        if(parameters.$queryParameters) {
            Object.keys(parameters.$queryParameters).forEach((parameterName) => {
                let parameter = parameters.$queryParameters[parameterName];
                queryParameters[parameterName] = parameter;
            });
        }


    {{^isBodyParameter}}
        {{#isPOST}}
            form = queryParameters;
        {{/isPOST}}
    {{/isBodyParameter}}

    {{#basePath}}
        path = this.basePath + path
    {{/basePath}}

        this.request('{{method}}', this.protocol, this.domain, this.port, path, queryParameters, body, headers, form, reject, resolve);

    });
};
