import 'package:jinja/jinja.dart' as jj; import 'package:apidash/utils/utils.dart' show stripUrlParams; import 'package:apidash/models/models.dart' show RequestModel; import 'package:apidash/consts.dart'; class PhpGuzzleCodeGen { String kStringImportNode = """sendAsync($request)->wait(); echo $res->getStatusCode() . "\n"; echo $res->getBody(); """; String? getCode(RequestModel requestModel) { try { jj.Template kNodejsImportTemplate = jj.Template(kStringImportNode); String importsData = kNodejsImportTemplate.render({ "hasFormData": requestModel.hasFormData, }); String result = importsData; if (requestModel.hasFormData && requestModel.formDataMapList.isNotEmpty) { var templateMultiPartBody = jj.Template(kMultiPartBodyTemplate); var renderedMultiPartBody = templateMultiPartBody.render({ "fields_list": requestModel.formDataMapList.map((field) { return ''' [ 'name' => '${field['name']}', 'contents' => '${field['value']}' ],\n'''; }).join(), }); result += renderedMultiPartBody; } var params = requestModel.enabledParamsMap; if (params.isNotEmpty) { var templateParams = jj.Template(kTemplateParams); List paramList = []; params.forEach((key, value) { paramList.add("'$key' => '$value'"); }); result += templateParams.render({ "params": paramList.join(",\n"), }); } var headers = requestModel.enabledHeadersMap; List headerList = []; if (headers.isNotEmpty || requestModel.hasBody) { var templateHeader = jj.Template(kTemplateHeader); headers.forEach((key, value) { headerList.add("'$key' => '$value'"); }); if(!requestModel.hasContentTypeHeader && requestModel.hasBody){ if(requestModel.hasJsonData || requestModel.hasTextData){ headerList.add("'$kHeaderContentType' => '${requestModel.requestBodyContentType.header}'"); } if(requestModel.hasFormData){ headerList.add("'$kHeaderContentType' => '${requestModel.requestBodyContentType.header}; boundary=' . \$body->getBoundary()"); } } result += templateHeader.render({ "headers": headerList.join(",\n"), }); } var templateBody = jj.Template(kTemplateBody); if (requestModel.hasJsonData || requestModel.hasTextData) { result += templateBody .render({"body": requestModel.requestBody}); } var templateRequest = jj.Template(kStringRequest); result += templateRequest.render({ "url": stripUrlParams(requestModel.url), "method": requestModel.method.name.toLowerCase(), "queryParams": params.isNotEmpty ? ". \$queryParamsStr" : "", "headers": headerList.isNotEmpty ? ", \$headers" : "", "body": requestModel.hasBody? ", \$body" : "", }); return result; } catch (e) { return null; } } }