use gst::glib;
use gst::prelude::*;
pub mod imp;
pub use imp::PadNaming;
glib::wrapper! {
pub struct ZenohDemux(ObjectSubclass<imp::ZenohDemux>) @extends gst::Element, gst::Object;
}
unsafe impl Send for ZenohDemux {}
unsafe impl Sync for ZenohDemux {}
impl Default for ZenohDemux {
fn default() -> Self {
gst::Object::builder().build().unwrap()
}
}
impl ZenohDemux {
pub fn new(key_expr: &str) -> Self {
gst::Object::builder()
.property("key-expr", key_expr)
.build()
.unwrap()
}
pub fn builder(key_expr: &str) -> ZenohDemuxBuilder {
ZenohDemuxBuilder::new(key_expr)
}
pub fn set_key_expr(&self, key_expr: &str) {
self.set_property("key-expr", key_expr);
}
pub fn set_config(&self, config_path: &str) {
self.set_property("config", config_path);
}
pub fn set_pad_naming(&self, naming: PadNaming) {
self.set_property("pad-naming", naming);
}
pub fn set_receive_timeout_ms(&self, timeout: u64) {
self.set_property("receive-timeout-ms", timeout);
}
pub fn set_session_group(&self, group: &str) {
self.set_property("session-group", group);
}
pub fn key_expr(&self) -> String {
self.property("key-expr")
}
pub fn config(&self) -> Option<String> {
self.property("config")
}
pub fn pad_naming(&self) -> PadNaming {
self.property("pad-naming")
}
pub fn receive_timeout_ms(&self) -> u64 {
self.property("receive-timeout-ms")
}
pub fn session_group(&self) -> Option<String> {
self.property("session-group")
}
pub fn bytes_received(&self) -> u64 {
self.property("bytes-received")
}
pub fn messages_received(&self) -> u64 {
self.property("messages-received")
}
pub fn pads_created(&self) -> u64 {
self.property("pads-created")
}
}
impl TryFrom<gst::Element> for ZenohDemux {
type Error = gst::Element;
fn try_from(element: gst::Element) -> Result<Self, Self::Error> {
element.downcast()
}
}
pub struct ZenohDemuxBuilder {
key_expr: String,
config: Option<String>,
pad_naming: Option<PadNaming>,
receive_timeout_ms: Option<u64>,
session_group: Option<String>,
}
impl ZenohDemuxBuilder {
pub fn new(key_expr: &str) -> Self {
Self {
key_expr: key_expr.to_string(),
config: None,
pad_naming: None,
receive_timeout_ms: None,
session_group: None,
}
}
pub fn config(mut self, path: &str) -> Self {
self.config = Some(path.to_string());
self
}
pub fn pad_naming(mut self, naming: PadNaming) -> Self {
self.pad_naming = Some(naming);
self
}
pub fn receive_timeout_ms(mut self, timeout: u64) -> Self {
self.receive_timeout_ms = Some(timeout);
self
}
pub fn session_group(mut self, group: &str) -> Self {
self.session_group = Some(group.to_string());
self
}
pub fn build(self) -> ZenohDemux {
let mut builder = gst::Object::builder::<ZenohDemux>().property("key-expr", &self.key_expr);
if let Some(config) = self.config {
builder = builder.property("config", config);
}
if let Some(naming) = self.pad_naming {
builder = builder.property("pad-naming", naming);
}
if let Some(timeout) = self.receive_timeout_ms {
builder = builder.property("receive-timeout-ms", timeout);
}
if let Some(ref sg) = self.session_group {
builder = builder.property("session-group", sg);
}
builder.build().unwrap()
}
}
pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> {
gst::Element::register(
Some(plugin),
"zenohdemux",
gst::Rank::NONE,
ZenohDemux::static_type(),
)
}