use crate::error::Result;
use crate::podman_service::PodmanService;
use crate::system::parameter_types::{EventsParameter, EventsParameterStreamingQuery};
use crate::system::response_types::{Event, GetInfoResponse};
use crate::utils;
use futures::Stream;
use std::convert::TryInto;
#[cfg(feature = "enable-tracing")]
use tracing::instrument;
#[derive(Debug)]
pub struct System<'service> {
podman_service: &'service PodmanService,
}
impl<'service> System<'service> {
pub(crate) fn new(podman_service: &'service PodmanService) -> Self {
System { podman_service }
}
#[cfg_attr(feature = "enable-tracing", instrument(name = "System.get_info"))]
pub async fn get_info(&self) -> Result<GetInfoResponse> {
let endpoint = utils::create_endpoint("/libpod/info");
let response = self
.podman_service
.get_request(&endpoint, None, None, None)
.await?;
utils::deserialize_service_response(response)
}
#[cfg_attr(
feature = "enable-tracing",
instrument(name = "System.get_events_streaming")
)]
pub async fn get_events_streaming(
&self,
parameter: EventsParameter,
) -> Result<impl Stream<Item = Result<Event>>> {
let endpoint = utils::create_endpoint("/libpod/events");
let parameter: EventsParameterStreamingQuery = parameter.try_into()?;
let query = serde_qs::to_string(¶meter)?;
let (_status_code, result_stream, _header_map) = self
.podman_service
.get_json_stream(&endpoint, Some(query), None, None)
.await?;
Ok(result_stream)
}
}