// Copyright (c) [2024] SUSE LLC // // All Rights Reserved. // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation; either version 2 of the License, or (at your option) // any later version. // // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, contact SUSE LLC. // // To contact SUSE LLC about this file by physical or electronic mail, you may // find current contact information at www.suse.com. use axum::{ body::{to_bytes, Body}, extract::Request, response::Response, Router, }; use tower::ServiceExt; /// Turns a request or response body into a string. pub async fn body_to_string(body: Body) -> String { let bytes = to_bytes(body, usize::MAX).await.unwrap(); String::from_utf8(bytes.to_vec()).unwrap() } /// Wrapper around a router to send request. /// /// It hides the details of the communication with the server. pub struct Client { router: Router, } impl Client { /// Creates a new client. /// /// * `router`: service router. pub fn new(router: Router) -> Self { Self { router } } /// Sends a message. pub async fn send_request(&self, request: Request) -> Response { self.router .clone() .oneshot(request) .await .expect("Could not send the request: {request:?}") } }