use crate::{gstd_types, resources::Pipeline, Error, GstClient};
#[derive(Debug, Clone)]
pub struct PipelineElement {
name: String,
client: GstClient,
pipeline: Pipeline,
}
impl PipelineElement {
pub(crate) fn new<S: Into<String>>(name: S, pipeline: &Pipeline) -> Self {
Self {
name: name.into(),
client: pipeline.client.clone(),
pipeline: pipeline.clone(),
}
}
pub async fn property(&self, property: &str) -> Result<gstd_types::SuccessResponse, Error> {
let resp = self
.client
.get(&format!(
"pipelines/{}/elements/{}/properties/{property}",
self.pipeline.name, self.name
))
.await?;
self.client.process_resp(resp).await
}
pub async fn set_property(
&self,
property: &str,
value: &str,
) -> Result<gstd_types::SuccessResponse, Error> {
let resp = self
.client
.put(&format!(
"pipelines/{}/elements/\
{}/properties/{property}?name={value}",
self.pipeline.name, self.name
))
.await?;
self.client.process_resp(resp).await
}
pub async fn signal_connect(&self, signal: &str) -> Result<gstd_types::SuccessResponse, Error> {
let resp = self
.client
.get(&format!(
"pipelines/{}/\
elements/{}/signals/{signal}/callback",
self.pipeline.name, self.name
))
.await?;
self.client.process_resp(resp).await
}
pub async fn signal_disconnect(
&self,
signal: &str,
) -> Result<gstd_types::SuccessResponse, Error> {
let resp = self
.client
.get(&format!(
"pipelines/{}/\
elements/{}/signals/{signal}/disconnect",
self.pipeline.name, self.name
))
.await?;
self.client.process_resp(resp).await
}
pub async fn set_signal_timeout(
&self,
signal: &str,
timeout: &str,
) -> Result<gstd_types::SuccessResponse, Error> {
let resp = self
.client
.put(&format!(
"pipelines/{}/\
elements/{}/signals/{signal}/timeout?name={timeout}",
self.pipeline.name, self.name
))
.await?;
self.client.process_resp(resp).await
}
}