import { isJSONContentType } from "~/helpers/utils/contenttypes" export const GoNativeCodegen = { id: "go-native", name: "Golang Native", generator: ({ url, pathName, queryString, auth, httpUser, httpPassword, bearerToken, method, rawInput, rawParams, rawRequestBody, contentType, headers, }) => { const requestString = [] let genHeaders = [] // initial request setup let 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 Occured %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 Occured %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("") }, }