import { isJSONContentType } from "~/helpers/utils/contenttypes" export const GoNativeCodegen = { id: "go-native", name: "Go Native", language: "golang", generator: ({ url, pathName, queryString, auth, httpUser, httpPassword, bearerToken, method, rawInput, rawParams, rawRequestBody, contentType, headers, }) => { const requestString = [] let genHeaders = [] // initial request setup const requestBody = rawInput ? rawParams : rawRequestBody if (method === "GET") { requestString.push( `req, err := http.NewRequest("${method}", "${url}${pathName}?${queryString}")\n` ) } if (["POST", "PUT", "PATCH", "DELETE"].includes(method)) { genHeaders.push(`req.Header.Set("Content-Type", "${contentType}")\n`) if (isJSONContentType(contentType)) { requestString.push(`var reqBody = []byte(\`${requestBody}\`)\n\n`) requestString.push( `req, err := http.NewRequest("${method}", "${url}${pathName}?${queryString}", bytes.NewBuffer(reqBody))\n` ) } else if (contentType.includes("x-www-form-urlencoded")) { requestString.push( `req, err := http.NewRequest("${method}", "${url}${pathName}?${queryString}", strings.NewReader("${requestBody}"))\n` ) } } // headers // auth if (auth === "Basic Auth") { const basic = `${httpUser}:${httpPassword}` genHeaders.push( `req.Header.Set("Authorization", "Basic ${window.btoa( unescape(encodeURIComponent(basic)) )}")\n` ) } else if (auth === "Bearer Token" || auth === "OAuth 2.0") { genHeaders.push( `req.Header.Set("Authorization", "Bearer ${bearerToken}")\n` ) } // custom headers if (headers) { headers.forEach(({ key, value }) => { if (key) genHeaders.push(`req.Header.Set("${key}", "${value}")\n`) }) } genHeaders = genHeaders.join("").slice(0, -1) requestString.push(`${genHeaders}\n`) requestString.push( `if err != nil {\n log.Fatalf("An error occurred %v", err)\n}\n\n` ) // request boilerplate requestString.push(`client := &http.Client{}\n`) requestString.push( `resp, err := client.Do(req)\nif err != nil {\n log.Fatalf("An error occurred %v", err)\n}\n\n` ) requestString.push(`defer resp.Body.Close()\n`) requestString.push( `body, err := ioutil.ReadAll(resp.Body)\nif err != nil {\n log.Fatalln(err)\n}\n` ) return requestString.join("") }, }