from ..parser.models import ParsedCurl def generate_go(parsed: ParsedCurl) -> str: """Generate Go net/http code from parsed curl command.""" lines = [ "package main", "", "import (", ' "bytes"', ' "encoding/json"', ' "fmt"', ' "net/http"', ' "time"', ")", "", ] if parsed.auth and parsed.auth.username and parsed.auth.password: lines.extend([ "func main() {", f' url := "{parsed.url}"', "", f' username := "{parsed.auth.username}"', f' password := "{parsed.auth.password}"', ' authString := username + ":" + password', ' authEncoded := "Basic " + authString', "", ]) else: lines.extend([ "func main() {", f' url := "{parsed.url}"', "", ]) headers_list = [] for h in parsed.headers: headers_list.append(f' "{h.key}": "{h.value}"') if parsed.user_agent: headers_list.append(f' "User-Agent": "{parsed.user_agent}"') method_name = parsed.method.value.upper() if parsed.data: if parsed.data.data_type.value == "json" and parsed.data.json_data: import json json_str = json.dumps(parsed.data.json_data) lines.append(f" jsonData := []byte({json_str})") lines.append("") lines.append(f" req, err := http.NewRequest(\"{method_name}\", url, bytes.NewBuffer(jsonData))") lines.append(" if err != nil {") lines.append(' fmt.Printf(\"Error: %v\\n\", err)') lines.append(" return") lines.append(" }") lines.append("") else: lines.append(f" data := {repr(parsed.data.content)}") lines.append("") lines.append(f" req, err := http.NewRequest(\"{method_name}\", url, bytes.NewBufferString(data))") lines.append(" if err != nil {") lines.append(' fmt.Printf(\"Error: %v\\n\", err)') lines.append(" return") lines.append(" }") lines.append("") else: lines.append(f" req, err := http.NewRequest(\"{method_name}\", url, nil)") lines.append(" if err != nil {") lines.append(' fmt.Printf(\"Error: %v\\n\", err)') lines.append(" return") lines.append(" }") lines.append("") if parsed.auth and parsed.auth.username and parsed.auth.password: lines.append(' req.Header.Set("Authorization", authEncoded)') for h in parsed.headers: lines.append(f' req.Header.Set("{h.key}", "{h.value}")') if parsed.user_agent: lines.append(f' req.Header.Set("User-Agent", "{parsed.user_agent}")') if headers_list: lines.append("") if parsed.timeout: lines.append(f" client := &http.Client{{Timeout: {parsed.timeout} * time.Second}}") else: lines.append(" client := &http.Client{}") lines.append("") lines.append(" resp, err := client.Do(req)") lines.append(" if err != nil {") lines.append(' fmt.Printf(\"Error: %v\\n\", err)') lines.append(" return") lines.append(" }") lines.append(" defer resp.Body.Close()") lines.append("") lines.append(" if resp.StatusCode != http.StatusOK {") lines.append(' fmt.Printf(\"HTTP error: %d\\n\", resp.StatusCode)') lines.append(" return") lines.append(" }") lines.append("") lines.append(" var result map[string]interface{}") lines.append(" json.NewDecoder(resp.Body).Decode(&result)") lines.append(" jsonData, _ := json.MarshalIndent(result, \"\", \" \")") lines.append(' fmt.Printf(\"%s\\n\", jsonData)') lines.append("}") return "\n".join(lines)