Skip to main content

bt_hfp/
dtmf.rs

1// Copyright 2025 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use fidl_fuchsia_bluetooth_hfp as fidl;
6
7/// Represents a single dual-tone multi-frequency signaling code.
8/// This is a native representation of the FIDL enum `fuchsia.bluetooth.hfp.DtmfCode`.
9#[derive(Clone, Copy, Debug, PartialEq)]
10pub enum Code {
11    One,
12    Two,
13    Three,
14    Four,
15    Five,
16    Six,
17    Seven,
18    Eight,
19    Nine,
20    NumberSign,
21    Zero,
22    Asterisk,
23    A,
24    B,
25    C,
26    D,
27}
28
29impl TryFrom<&str> for Code {
30    type Error = ();
31    fn try_from(x: &str) -> Result<Self, Self::Error> {
32        match x {
33            "1" => Ok(Self::One),
34            "2" => Ok(Self::Two),
35            "3" => Ok(Self::Three),
36            "4" => Ok(Self::Four),
37            "5" => Ok(Self::Five),
38            "6" => Ok(Self::Six),
39            "7" => Ok(Self::Seven),
40            "8" => Ok(Self::Eight),
41            "9" => Ok(Self::Nine),
42            "#" => Ok(Self::NumberSign),
43            "0" => Ok(Self::Zero),
44            "*" => Ok(Self::Asterisk),
45            "A" => Ok(Self::A),
46            "B" => Ok(Self::B),
47            "C" => Ok(Self::C),
48            "D" => Ok(Self::D),
49            _ => Err(()),
50        }
51    }
52}
53
54impl From<Code> for String {
55    fn from(x: Code) -> Self {
56        match x {
57            Code::One => String::from("1"),
58            Code::Two => String::from("2"),
59            Code::Three => String::from("3"),
60            Code::Four => String::from("4"),
61            Code::Five => String::from("5"),
62            Code::Six => String::from("6"),
63            Code::Seven => String::from("7"),
64            Code::Eight => String::from("8"),
65            Code::Nine => String::from("9"),
66            Code::NumberSign => String::from("#"),
67            Code::Zero => String::from("0"),
68            Code::Asterisk => String::from("*"),
69            Code::A => String::from("A"),
70            Code::B => String::from("B"),
71            Code::C => String::from("C"),
72            Code::D => String::from("D"),
73        }
74    }
75}
76
77impl From<fidl::DtmfCode> for Code {
78    fn from(x: fidl::DtmfCode) -> Self {
79        match x {
80            fidl::DtmfCode::One => Self::One,
81            fidl::DtmfCode::Two => Self::Two,
82            fidl::DtmfCode::Three => Self::Three,
83            fidl::DtmfCode::Four => Self::Four,
84            fidl::DtmfCode::Five => Self::Five,
85            fidl::DtmfCode::Six => Self::Six,
86            fidl::DtmfCode::Seven => Self::Seven,
87            fidl::DtmfCode::Eight => Self::Eight,
88            fidl::DtmfCode::Nine => Self::Nine,
89            fidl::DtmfCode::NumberSign => Self::NumberSign,
90            fidl::DtmfCode::Zero => Self::Zero,
91            fidl::DtmfCode::Asterisk => Self::Asterisk,
92            fidl::DtmfCode::A => Self::A,
93            fidl::DtmfCode::B => Self::B,
94            fidl::DtmfCode::C => Self::C,
95            fidl::DtmfCode::D => Self::D,
96        }
97    }
98}
99
100impl From<Code> for fidl::DtmfCode {
101    fn from(x: Code) -> Self {
102        match x {
103            Code::One => Self::One,
104            Code::Two => Self::Two,
105            Code::Three => Self::Three,
106            Code::Four => Self::Four,
107            Code::Five => Self::Five,
108            Code::Six => Self::Six,
109            Code::Seven => Self::Seven,
110            Code::Eight => Self::Eight,
111            Code::Nine => Self::Nine,
112            Code::NumberSign => Self::NumberSign,
113            Code::Zero => Self::Zero,
114            Code::Asterisk => Self::Asterisk,
115            Code::A => Self::A,
116            Code::B => Self::B,
117            Code::C => Self::C,
118            Code::D => Self::D,
119        }
120    }
121}