rskit_media/filter/
model.rs1use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct Filter {
21 pub name: String,
23 pub target: FilterTarget,
25 pub params: Params,
27}
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
31pub enum FilterTarget {
32 Video,
34 Audio,
36}
37
38#[derive(Debug, Clone, Default, Serialize, Deserialize)]
40pub struct Params(HashMap<String, ParamValue>);
41
42impl Params {
43 pub fn new() -> Self {
45 Self(HashMap::new())
46 }
47
48 #[must_use]
50 pub fn set(mut self, key: impl Into<String>, val: impl Into<ParamValue>) -> Self {
51 self.0.insert(key.into(), val.into());
52 self
53 }
54
55 pub fn get(&self, key: &str) -> Option<&ParamValue> {
57 self.0.get(key)
58 }
59
60 pub fn iter(&self) -> impl Iterator<Item = (&str, &ParamValue)> {
62 self.0.iter().map(|(k, v)| (k.as_str(), v))
63 }
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize)]
68pub enum ParamValue {
69 Int(i64),
71 Float(f64),
73 Str(String),
75 Bool(bool),
77}
78
79impl From<i64> for ParamValue {
80 fn from(v: i64) -> Self {
81 Self::Int(v)
82 }
83}
84
85impl From<f64> for ParamValue {
86 fn from(v: f64) -> Self {
87 Self::Float(v)
88 }
89}
90
91impl From<String> for ParamValue {
92 fn from(v: String) -> Self {
93 Self::Str(v)
94 }
95}
96
97impl From<&str> for ParamValue {
98 fn from(v: &str) -> Self {
99 Self::Str(v.to_string())
100 }
101}
102
103impl From<bool> for ParamValue {
104 fn from(v: bool) -> Self {
105 Self::Bool(v)
106 }
107}