| 480 | } |
| 481 | |
| 482 | async fn config_network_options( |
| 483 | &self, |
| 484 | context: &C, |
| 485 | ) -> Result<ConfigNetworkOptionsResponse, ApiError> { |
| 486 | let mut client_service = self.client_service.clone(); |
| 487 | let mut uri = format!("{}/ceramic/config/network", self.base_path); |
| 488 | |
| 489 | // Query parameters |
| 490 | let query_string = { |
| 491 | let mut query_string = form_urlencoded::Serializer::new("".to_owned()); |
| 492 | query_string.finish() |
| 493 | }; |
| 494 | if !query_string.is_empty() { |
| 495 | uri += "?"; |
| 496 | uri += &query_string; |
| 497 | } |
| 498 | |
| 499 | let uri = match Uri::from_str(&uri) { |
| 500 | Ok(uri) => uri, |
| 501 | Err(err) => return Err(ApiError(format!("Unable to build URI: {}", err))), |
| 502 | }; |
| 503 | |
| 504 | let mut request = match Request::builder() |
| 505 | .method("OPTIONS") |
| 506 | .uri(uri) |
| 507 | .body(Body::empty()) |
| 508 | { |
| 509 | Ok(req) => req, |
| 510 | Err(e) => return Err(ApiError(format!("Unable to create request: {}", e))), |
| 511 | }; |
| 512 | |
| 513 | let header = HeaderValue::from_str(Has::<XSpanIdString>::get(context).0.as_str()); |
| 514 | request.headers_mut().insert( |
| 515 | HeaderName::from_static("x-span-id"), |
| 516 | match header { |
| 517 | Ok(h) => h, |
| 518 | Err(e) => { |
| 519 | return Err(ApiError(format!( |
| 520 | "Unable to create X-Span ID header value: {}", |
| 521 | e |
| 522 | ))) |
| 523 | } |
| 524 | }, |
| 525 | ); |
| 526 | |
| 527 | let response = client_service |
| 528 | .call((request, context.clone())) |
| 529 | .map_err(|e| ApiError(format!("No response received: {}", e))) |
| 530 | .await?; |
| 531 | |
| 532 | match response.status().as_u16() { |
| 533 | 200 => Ok(ConfigNetworkOptionsResponse::Cors), |
| 534 | code => { |
| 535 | let headers = response.headers().clone(); |
| 536 | let body = response.into_body().take(100).into_raw().await; |
| 537 | Err(ApiError(format!( |
| 538 | "Unexpected response code {}:\n{:?}\n\n{}", |
| 539 | code, |