From 845f06741b683ab954ce77e4b8eff9eead554b35 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Fri, 30 Jan 2026 12:39:25 +0000 Subject: [PATCH] Initial commit: Add curl-to-code-cli project --- .curl_to_code/generators/go_gen.py | 108 +++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 .curl_to_code/generators/go_gen.py diff --git a/.curl_to_code/generators/go_gen.py b/.curl_to_code/generators/go_gen.py new file mode 100644 index 0000000..fb110f1 --- /dev/null +++ b/.curl_to_code/generators/go_gen.py @@ -0,0 +1,108 @@ +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)