///|
/// Split a raw request target into path and query components.
pub fn split_request_target(target : String) -> (String, String) {
let chars = target.to_array()
let mut query_start = -1
for i in 0.. Array[String] {
let segments : Array[String] = []
let current : Array[Char] = []
for c in path {
if c == '/' {
if current.length() > 0 {
segments.push(String::from_array(current))
current.clear()
}
} else {
current.push(c)
}
}
if current.length() > 0 {
segments.push(String::from_array(current))
}
segments
}
///|
/// Execute a request using a raw path such as `/collections/demo?foo=bar`.
pub async fn[S : @storage.AsyncStorage] execute_path_request(
manager : CollectionManager[S],
http_method : String,
target : String,
body : String,
) -> ApiResponse {
let (path, _query) = split_request_target(target)
execute_request(manager, http_method, parse_request_path(path), body)
}