import { Builder } from '../utils/builder' import { Config, Http } from '../utils/generate' import { Client } from '../utils/registry' import { GetContentType, IsStringBody, IsObjectBody, ContentTypeIncludes } from '../utils/utils' export default { language: 'rust', client: 'reqwest', generate(config: Config, http: Http): string { const builder = new Builder({ indent: config.indent || ' ', join: config.join || '\n' }) builder.line('use reqwest::blocking::Client;') builder.line('use std::error::Error;') builder.line() builder.line('fn main() -> Result<(), Box> {') builder.indent() builder.line('let client = Client::new();') builder.line() builder.line('let res = client.request(reqwest::Method::' + http.method.toUpperCase() + ', "' + http.url + '")') builder.indent() // URL Parameters if (http.params && Object.keys(http.params).length > 0) { builder.line('.query(&[') builder.indent() for (const [key, value] of Object.entries(http.params)) { if (Array.isArray(value)) { for (const val of value) { builder.line(`("${key}", "${val}"),`) } } else { builder.line(`("${key}", "${value}"),`) } } builder.outdent() builder.line('])') } if (http.headers) { for (const [key, value] of Object.entries(http.headers)) { if (Array.isArray(value)) { value.forEach((val) => builder.line(`.header("${key}", "${val}")`)) } else { builder.line(`.header("${key}", "${value}")`) } } } if (http.cookies) { for (const [key, value] of Object.entries(http.cookies)) { if (Array.isArray(value)) { value.forEach((val) => builder.line(`.cookie("${key}", "${val}")`)) } else { builder.line(`.cookie("${key}", "${value}")`) } } } if (http.body) { const contentType = GetContentType(http.headers) if (ContentTypeIncludes(contentType, 'form')) { builder.line('.form(&') builder.json(http.body) builder.append(')') } else if (ContentTypeIncludes(contentType, 'json') || (!contentType && IsObjectBody(http.body))) { builder.line('.json(&') builder.json(http.body) builder.append(')') } else if (IsStringBody(http.body)) { builder.line(`.body("${http.body.replace(/"/g, '\\"')}")`) } } builder.line('.send()?;') builder.outdent() builder.line() if (config.handleErrors) { builder.line('if res.status().is_success() {') builder.indent() builder.line('println!("{}", res.text()?);') builder.outdent() builder.line('} else {') builder.indent() builder.line('eprintln!("Request failed with status: {}", res.status());') builder.outdent() builder.line('}') } else { builder.line('println!("{}", res.text()?);') } builder.line('Ok(())') builder.outdent() builder.line('}') return builder.output() } } as Client