starfish-sdk 1.0.0

海星SDK
Documentation
use anyhow::{ensure, Result};
use reqwest::Client;
use serde::Serialize;
use serde_json::Value;

pub async fn http_get_json<P: AsRef<str>>(
	path: P,
	headers: Vec<(String, String)>,
	params: Vec<(String, String)>,
) -> Result<Value> {
	let params = serde_urlencoded::to_string(params)?;
	let url = if params.len() == 0 { format!("{}", path.as_ref()) } else { format!("{}?{}", path.as_ref(), params) };
	let mut request = Client::new().get(url);
	for (key, value) in headers {
		request = request.header(key, value);
	}
	tracing::debug!("{:?}", request);
	let response = request.send().await?;
	ensure!(response.status().as_u16() == 200, "响应错误({})", response.status());
	let data: Value = response.json().await?;
	return Ok(data)
}

pub async fn http_post_json<P: AsRef<str>, B: Serialize + ?Sized>(
	path: P,
	headers: Vec<(String, String)>,
	body: &B,
) -> Result<Value> {
	let mut request = Client::new().post(path.as_ref()).json(body);
	for (key, value) in headers {
		request = request.header(key, value);
	}
	tracing::debug!("{:?}", request);
	let response = request.send().await?;
	ensure!(response.status().as_u16() == 200, "响应错误({})", response.status());
	let data: Value = response.json().await?;
	Ok(data)
}