Skip to main content

CatalogExt

Trait CatalogExt 

Source
pub trait CatalogExt:
    Serialize
    + DeserializeOwned
    + Default
    + Clone
    + Send
    + Unpin
    + 'static { }
Expand description

An application’s catalog extension: a plain serde struct of extra root members, serialized as a flat union with the members MSF itself defines.

Any type that serializes to a JSON object qualifies, so a caller names its own struct and never touches serde_json:

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Clone, Default)]
struct Mpegts {
    program_number: u16,
}

#[derive(Serialize, Deserialize, Clone, Default)]
struct MpegtsExt {
    #[serde(skip_serializing_if = "Option::is_none")]
    mpegts: Option<Mpegts>,
}

let mut catalog = moq_msf::Catalog::<MpegtsExt>::default();
catalog.ext.mpegts = Some(Mpegts { program_number: 1 });

() is the no-extension case, so Catalog<()> carries only what MSF defines and drops the rest. For passthrough of members that aren’t known at compile time, use serde_json::Map<String, serde_json::Value>, which keeps them verbatim.

An extension MUST NOT name a member after one MSF defines (version, generatedAt, isComplete, tracks, initDataList); the wire JSON would carry a duplicate key.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§