diff --git a/src/http_convert/models.py b/src/http_convert/models.py new file mode 100644 index 0000000..7d791e8 --- /dev/null +++ b/src/http_convert/models.py @@ -0,0 +1,50 @@ +from pydantic import BaseModel, Field +from typing import Optional, Dict, Any, List +from enum import Enum + + +class HttpMethod(str, Enum): + GET = "GET" + POST = "POST" + PUT = "PUT" + PATCH = "PATCH" + DELETE = "DELETE" + HEAD = "HEAD" + OPTIONS = "OPTIONS" + + +class HTTPRequest(BaseModel): + method: HttpMethod = HttpMethod.GET + url: str + headers: Dict[str, str] = Field(default_factory=dict) + params: Dict[str, str] = Field(default_factory=dict) + body: Optional[str] = None + body_json: Optional[Dict[str, Any]] = None + + def get_final_url(self) -> str: + if self.params: + param_str = "&".join(f"{k}={v}" for k, v in self.params.items()) + separator = "&" if "?" in self.url else "?" + return f"{self.url}{separator}{param_str}" + return self.url + + +class OutputFormat(str, Enum): + CURL = "curl" + HTTPie = "httpie" + FETCH = "fetch" + AXIOS = "axios" + + +class InputFormat(str, Enum): + CURL = "curl" + HTTPie = "httpie" + FETCH = "fetch" + AXIOS = "axios" + + +class ConversionResult(BaseModel): + original_format: InputFormat + target_format: OutputFormat + original_request: HTTPRequest + converted_code: str