Initialize and register the extension in the Extensions API
(
client: &'a Client,
extension_name: Option<&'a str>,
events: Option<&'a [&'a str]>,
)
| 559 | |
| 560 | /// Initialize and register the extension in the Extensions API |
| 561 | async fn register<'a>( |
| 562 | client: &'a Client, |
| 563 | extension_name: Option<&'a str>, |
| 564 | events: Option<&'a [&'a str]>, |
| 565 | ) -> Result<RegisterResponse, Error> { |
| 566 | let name = match extension_name { |
| 567 | Some(name) => name.into(), |
| 568 | None => { |
| 569 | let args: Vec<String> = std::env::args().collect(); |
| 570 | PathBuf::from(args[0].clone()) |
| 571 | .file_name() |
| 572 | .expect("unexpected executable name") |
| 573 | .to_str() |
| 574 | .expect("unexpect executable name") |
| 575 | .to_string() |
| 576 | } |
| 577 | }; |
| 578 | |
| 579 | let events = events.unwrap_or(&["INVOKE", "SHUTDOWN"]); |
| 580 | |
| 581 | let req = requests::register_request(&name, events)?; |
| 582 | let res = client.call(req).await?; |
| 583 | if !res.status().is_success() { |
| 584 | let err = format!("unable to register the extension: {}", res.status()); |
| 585 | return Err(ExtensionError::boxed(err)); |
| 586 | } |
| 587 | |
| 588 | let header = res |
| 589 | .headers() |
| 590 | .get(requests::EXTENSION_ID_HEADER) |
| 591 | .ok_or_else(|| ExtensionError::boxed("missing extension id header")) |
| 592 | .map_err(|e| ExtensionError::boxed(e.to_string()))?; |
| 593 | let extension_id = header.to_str()?.to_string(); |
| 594 | |
| 595 | let (_, body) = res.into_parts(); |
| 596 | let body = body.collect().await?.to_bytes(); |
| 597 | let response: RegisterResponseBody = serde_json::from_slice(&body)?; |
| 598 | |
| 599 | Ok(RegisterResponse { |
| 600 | extension_id, |
| 601 | function_name: response.function_name, |
| 602 | function_version: response.function_version, |
| 603 | handler: response.handler, |
| 604 | account_id: response.account_id, |
| 605 | }) |
| 606 | } |
no test coverage detected