use alloc::string::String;
use alloc::vec::Vec;
#[derive(scale::Encode, scale::Decode)]
#[cfg_attr(feature = "std", derive(scale_info::TypeInfo))]
pub struct HttpRequest {
pub url: String,
pub method: String,
pub headers: Vec<(String, String)>,
pub body: Vec<u8>,
}
#[derive(scale::Encode, scale::Decode)]
#[cfg_attr(feature = "std", derive(scale_info::TypeInfo))]
pub struct HttpResponse {
pub status_code: u16,
pub reason_phrase: String,
pub headers: Vec<(String, String)>,
pub body: Vec<u8>,
}
impl HttpResponse {
pub fn ok(body: Vec<u8>) -> Self {
Self {
status_code: 200,
reason_phrase: "OK".into(),
headers: Default::default(),
body,
}
}
pub fn not_found() -> Self {
Self {
status_code: 404,
reason_phrase: "Not Found".into(),
headers: Default::default(),
body: Default::default(),
}
}
}
#[macro_export]
macro_rules! http_get {
($url: expr, $headers: expr) => {{
use pink_extension::chain_extension::{HttpRequest, HttpResponse};
let headers = $headers;
let request = HttpRequest {
url: $url.into(),
method: "GET".into(),
headers,
body: Default::default(),
};
$crate::pink_extension_instance().http_request(request)
}};
($url: expr) => {{
$crate::http_get!($url, Default::default())
}};
}
#[macro_export]
macro_rules! http_post {
($url: expr, $data: expr, $headers: expr) => {{
use pink_extension::chain_extension::{HttpRequest, HttpResponse};
let headers = $headers;
let body = $data.into();
let request = HttpRequest {
url: $url.into(),
method: "POST".into(),
headers,
body,
};
$crate::pink_extension_instance().http_request(request)
}};
($url: expr, $data: expr) => {{
$crate::http_post!($url, $data, Default::default())
}};
}