#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(transparent))]
pub struct MediaTrackValueCapability<T> {
pub value: T,
}
impl<T> From<T> for MediaTrackValueCapability<T> {
fn from(value: T) -> Self {
Self { value }
}
}
impl From<&str> for MediaTrackValueCapability<String> {
fn from(value: &str) -> Self {
Self {
value: value.to_owned(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
type Subject = MediaTrackValueCapability<String>;
#[test]
fn from_str() {
let subject = Subject::from("string");
let actual = subject.value.as_str();
let expected = "string";
assert_eq!(actual, expected);
}
}
#[cfg(feature = "serde")]
#[cfg(test)]
mod serde_tests {
use crate::macros::test_serde_symmetry;
use super::*;
type Subject = MediaTrackValueCapability<String>;
#[test]
fn customized() {
let subject = Subject {
value: "string".to_owned(),
};
let json = serde_json::json!("string");
test_serde_symmetry!(subject: subject, json: json);
}
}