summaryrefslogtreecommitdiff
path: root/cras/client/cras-sys/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cras/client/cras-sys/src/lib.rs')
-rw-r--r--cras/client/cras-sys/src/lib.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/cras/client/cras-sys/src/lib.rs b/cras/client/cras-sys/src/lib.rs
index 8128575b..2b3d21e0 100644
--- a/cras/client/cras-sys/src/lib.rs
+++ b/cras/client/cras-sys/src/lib.rs
@@ -10,6 +10,7 @@ use std::error;
use std::fmt;
use std::iter::FromIterator;
use std::os::raw::c_char;
+use std::str::FromStr;
use std::time::Duration;
#[allow(dead_code)]
@@ -47,6 +48,7 @@ unsafe impl data_model::DataInit for gen::cras_set_system_volume {}
pub enum Error {
InvalidChannel(i8),
InvalidClientType(u32),
+ InvalidClientTypeStr,
InvalidStreamType(u32),
}
@@ -68,6 +70,7 @@ impl fmt::Display for Error {
t,
CRAS_CLIENT_TYPE::CRAS_CLIENT_TYPE_SERVER_STREAM as u32 + 1
),
+ InvalidClientTypeStr => write!(f, "Invalid client type string"),
InvalidStreamType(t) => write!(
f,
"Stream type {} is not within valid range [0, {})",
@@ -426,6 +429,18 @@ impl TryFrom<u32> for CRAS_CLIENT_TYPE {
}
}
+impl FromStr for CRAS_CLIENT_TYPE {
+ type Err = Error;
+ fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
+ use CRAS_CLIENT_TYPE::*;
+ match s {
+ "crosvm" => Ok(CRAS_CLIENT_TYPE_CROSVM),
+ "arcvm" => Ok(CRAS_CLIENT_TYPE_ARCVM),
+ _ => Err(Error::InvalidClientTypeStr),
+ }
+ }
+}
+
impl Default for audio_stream_debug_info {
fn default() -> Self {
Self {