cosmic-settings/crates/cosmic-pipewire/src/profile.rs
2026-05-15 16:26:20 -06:00

54 lines
1.7 KiB
Rust

// Copyright 2025 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0
use crate::Availability;
use crate::spa_utils::string_from_pod;
use libspa::pod::Pod;
#[derive(Clone, Debug, Default)]
pub struct Profile {
pub index: i32,
pub priority: i32,
pub available: Availability,
pub name: String,
pub description: String,
}
impl Profile {
pub fn from_pod(pod: &Pod) -> Option<Self> {
let mut index = 0;
let mut priority = 0;
let mut available = Availability::Unknown;
let mut name = String::new();
let mut description = String::new();
let profile = pod.as_object().ok()?;
for prop in profile.props() {
match prop.key().0 {
libspa_sys::SPA_PARAM_PROFILE_index => index = prop.value().get_int().ok()?,
libspa_sys::SPA_PARAM_PROFILE_priority => priority = prop.value().get_int().ok()?,
libspa_sys::SPA_PARAM_PROFILE_available => {
available = match prop.value().get_id().unwrap().0 {
libspa_sys::SPA_PARAM_AVAILABILITY_no => Availability::No,
libspa_sys::SPA_PARAM_AVAILABILITY_yes => Availability::Yes,
_ => Availability::Unknown,
};
}
libspa_sys::SPA_PARAM_PROFILE_name => name = string_from_pod(prop.value())?,
libspa_sys::SPA_PARAM_PROFILE_description => {
description = string_from_pod(prop.value())?;
}
_ => (),
}
}
Some(Self {
index,
priority,
available,
name,
description,
})
}
}