UNPKG

@hoppscotch/httpsnippet

Version:

HTTP Request snippet generator for *most* languages

278 lines 11.4 kB
"use strict"; /** * @description * HTTP code snippet generator for Rust using reqwest * * @author * @Benjscho * * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. */ var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; exports.__esModule = true; exports.reqwest = void 0; var code_builder_1 = require("../../../helpers/code-builder"); var helpers_1 = require("../helpers"); exports.reqwest = { info: { key: 'reqwest', title: 'reqwest', link: 'https://docs.rs/reqwest/latest/reqwest/', description: 'reqwest HTTP library' }, convert: function (_a, options) { var e_1, _b, e_2, _c, e_3, _d, e_4, _e, e_5, _f; var queryObj = _a.queryObj, url = _a.url, postData = _a.postData, allHeaders = _a.allHeaders, method = _a.method; var opts = __assign({ indent: ' ', pretty: true }, options); var indentLevel = 0; // start snippet var _g = new code_builder_1.CodeBuilder({ indent: opts.indent }), push = _g.push, blank = _g.blank, join = _g.join, pushToLast = _g.pushToLast, unshift = _g.unshift; // import reqwest push('use reqwest;', indentLevel); blank(); // start async main for tokio push('#[tokio::main]', indentLevel); push('pub async fn main() {', indentLevel); indentLevel += 1; // add url push("let url = \"".concat(url, "\";"), indentLevel); blank(); var hasQuery = false; // construct query string if (Object.keys(queryObj).length) { hasQuery = true; push('let querystring = [', indentLevel); indentLevel += 1; try { for (var _h = __values(Object.entries(queryObj)), _j = _h.next(); !_j.done; _j = _h.next()) { var _k = __read(_j.value, 2), key = _k[0], value = _k[1]; push("(\"".concat(key, "\", \"").concat(value, "\"),"), indentLevel); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_j && !_j.done && (_b = _h["return"])) _b.call(_h); } finally { if (e_1) throw e_1.error; } } indentLevel -= 1; push('];', indentLevel); blank(); } // construct payload var payload = {}; var files = {}; var hasFiles = false; var hasForm = false; var hasBody = false; var jsonPayload = false; var isMultipart = false; switch (postData.mimeType) { case 'application/json': if (postData.jsonObj) { push("let payload = ".concat((0, helpers_1.literalRepresentation)(postData.jsonObj, opts, indentLevel), ";"), indentLevel); } jsonPayload = true; break; case 'multipart/form-data': isMultipart = true; if (!postData.params) { push("let form = reqwest::multipart::Form::new()", indentLevel); push(".text(\"\", \"\");", indentLevel + 1); break; } payload = {}; postData.params.forEach(function (p) { if (p.fileName) { files[p.name] = p.fileName; hasFiles = true; } else { payload[p.name] = p.value; } }); if (hasFiles) { try { for (var fileToPartString_1 = __values(fileToPartString), fileToPartString_1_1 = fileToPartString_1.next(); !fileToPartString_1_1.done; fileToPartString_1_1 = fileToPartString_1.next()) { var line = fileToPartString_1_1.value; push(line, indentLevel); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (fileToPartString_1_1 && !fileToPartString_1_1.done && (_c = fileToPartString_1["return"])) _c.call(fileToPartString_1); } finally { if (e_2) throw e_2.error; } } blank(); } push("let form = reqwest::multipart::Form::new()", indentLevel); try { for (var _l = __values(Object.entries(files)), _m = _l.next(); !_m.done; _m = _l.next()) { var _o = __read(_m.value, 2), name = _o[0], fileName = _o[1]; push(".part(\"".concat(name, "\", file_to_part(\"").concat(fileName, "\").await)"), indentLevel + 1); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_m && !_m.done && (_d = _l["return"])) _d.call(_l); } finally { if (e_3) throw e_3.error; } } try { for (var _p = __values(Object.entries(payload)), _q = _p.next(); !_q.done; _q = _p.next()) { var _r = __read(_q.value, 2), name = _r[0], value = _r[1]; push(".text(\"".concat(name, "\", \"").concat(value, "\")"), indentLevel + 1); } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (_q && !_q.done && (_e = _p["return"])) _e.call(_p); } finally { if (e_4) throw e_4.error; } } pushToLast(';'); break; default: { if (postData.mimeType === 'application/x-www-form-urlencoded' && postData.paramsObj) { push("let payload = ".concat((0, helpers_1.literalRepresentation)(postData.paramsObj, opts, indentLevel), ";"), indentLevel); hasForm = true; break; } if (postData.text) { push("let payload = ".concat((0, helpers_1.literalRepresentation)(postData.text, opts, indentLevel), ";"), indentLevel); hasBody = true; break; } } } if (hasForm || jsonPayload || hasBody) { unshift("use serde_json::json;"); blank(); } var hasHeaders = false; // construct headers if (Object.keys(allHeaders).length) { hasHeaders = true; push('let mut headers = reqwest::header::HeaderMap::new();', indentLevel); try { for (var _s = __values(Object.entries(allHeaders)), _t = _s.next(); !_t.done; _t = _s.next()) { var _u = __read(_t.value, 2), key = _u[0], value = _u[1]; // Skip setting content-type if there is a file, as this header will // cause the request to hang, and reqwest will set it for us. if (key.toLowerCase() === 'content-type' && isMultipart) { continue; } push("headers.insert(\"".concat(key, "\", ").concat((0, helpers_1.literalRepresentation)(value, opts), ".parse().unwrap());"), indentLevel); } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (_t && !_t.done && (_f = _s["return"])) _f.call(_s); } finally { if (e_5) throw e_5.error; } } blank(); } // construct client push('let client = reqwest::Client::new();', indentLevel); // construct query switch (method) { case 'POST': push("let response = client.post(url)", indentLevel); break; case 'GET': push("let response = client.get(url)", indentLevel); break; default: { push("let response = client.request(reqwest::Method::from_str(\"".concat(method, "\").unwrap(), url)"), indentLevel); unshift("use std::str::FromStr;"); break; } } if (hasQuery) { push(".query(&querystring)", indentLevel + 1); } if (isMultipart) { push(".multipart(form)", indentLevel + 1); } if (hasHeaders) { push(".headers(headers)", indentLevel + 1); } if (jsonPayload) { push(".json(&payload)", indentLevel + 1); } if (hasForm) { push(".form(&payload)", indentLevel + 1); } if (hasBody) { push(".body(payload)", indentLevel + 1); } // send query push('.send()', indentLevel + 1); push('.await;', indentLevel + 1); blank(); // Print response push('let results = response.unwrap()', indentLevel); push('.json::<serde_json::Value>()', indentLevel + 1); push('.await', indentLevel + 1); push('.unwrap();', indentLevel + 1); blank(); push('dbg!(results);', indentLevel); push('}\n'); return join(); } }; var fileToPartString = [ "async fn file_to_part(file_name: &'static str) -> reqwest::multipart::Part {", " let file = tokio::fs::File::open(file_name).await.unwrap();", " let stream = tokio_util::codec::FramedRead::new(file, tokio_util::codec::BytesCodec::new());", " let body = reqwest::Body::wrap_stream(stream);", " reqwest::multipart::Part::stream(body)", " .file_name(file_name)", " .mime_str(\"text/plain\").unwrap()", "}", ]; //# sourceMappingURL=client.js.map