ble_data_struct/descriptors/
characteristic_user_description.rs

1//! Characteristic User Description (Attribute Type: 0x2901) module.
2
3use crate::Uuid16bit;
4
5/// Characteristic User Description.
6#[derive(Debug, PartialEq, Clone)]
7pub struct CharacteristicUserDescription {
8    /// Characteristic User Description
9    pub description: String,
10}
11
12impl CharacteristicUserDescription {
13    /// Create [`CharacteristicUserDescription`] from [`String`].
14    ///
15    /// # Examples
16    ///
17    /// ```
18    /// use ble_data_struct::{
19    ///     descriptors::characteristic_user_description::CharacteristicUserDescription, Uuid16bit,
20    /// };
21    ///
22    /// let description = "description".to_string();
23    /// let result = CharacteristicUserDescription::new(description.to_string());
24    /// assert_eq!(description, result.description);
25    /// ```
26    pub fn new(description: String) -> Self {
27        Self { description }
28    }
29}
30
31impl TryFrom<&Vec<u8>> for CharacteristicUserDescription {
32    type Error = String;
33    /// Create [`CharacteristicUserDescription`] from [`Vec<u8>`].
34    ///
35    /// # Examples
36    ///
37    /// ```
38    /// use ble_data_struct::{
39    ///     descriptors::characteristic_user_description::CharacteristicUserDescription, Uuid16bit,
40    /// };
41    ///
42    /// let description = "description".to_string();
43    /// let result = CharacteristicUserDescription::try_from(&description.to_string().into_bytes());
44    /// assert!(result.is_ok());
45    /// assert_eq!(description, result.unwrap().description);
46    /// ```
47    fn try_from(value: &Vec<u8>) -> Result<Self, String> {
48        Ok(Self {
49            description: String::from_utf8(value.to_vec()).unwrap(),
50        })
51    }
52}
53
54impl Into<Vec<u8>> for CharacteristicUserDescription {
55    /// Create [`Vec<u8>`] from [`CharacteristicUserDescription`].
56    ///
57    /// # Examples
58    ///
59    /// ```
60    /// use ble_data_struct::{
61    ///     descriptors::characteristic_user_description::CharacteristicUserDescription, Uuid16bit,
62    /// };
63    ///
64    /// let description = "description".to_string();
65    /// let result = CharacteristicUserDescription::new(description.to_string());
66    /// let into_data: Vec<u8> = result.into();
67    /// assert_eq!(description.to_string().into_bytes(), into_data);
68    /// ```
69    fn into(self) -> Vec<u8> {
70        self.description.clone().into_bytes()
71    }
72}
73
74impl Uuid16bit for CharacteristicUserDescription {
75    /// return `0x2901`.
76    ///
77    /// # Examples
78    ///
79    /// ```
80    /// use ble_data_struct::{
81    ///     descriptors::characteristic_user_description::CharacteristicUserDescription, Uuid16bit,
82    /// };
83    ///
84    /// assert_eq!(0x2901, CharacteristicUserDescription::uuid_16bit());
85    /// ```
86    fn uuid_16bit() -> u16 {
87        0x2901
88    }
89}
90
91#[cfg(test)]
92mod tests {
93    use crate::{
94        descriptors::characteristic_user_description::CharacteristicUserDescription, Uuid16bit,
95    };
96
97    #[test]
98    fn test_new() {
99        let description = "description".to_string();
100        let result = CharacteristicUserDescription::new(description.to_string());
101        assert_eq!(description, result.description);
102    }
103
104    #[test]
105    fn test_try_from() {
106        let description = "description".to_string();
107        let result = CharacteristicUserDescription::try_from(&description.to_string().into_bytes());
108        assert!(result.is_ok());
109        assert_eq!(description, result.unwrap().description);
110    }
111
112    #[test]
113    fn test_into() {
114        let description = "description".to_string();
115        let result = CharacteristicUserDescription::new(description.to_string());
116        let into_data: Vec<u8> = result.into();
117        assert_eq!(description.to_string().into_bytes(), into_data);
118    }
119
120    #[test]
121    fn test_uuid_16bit() {
122        assert_eq!(0x2901, CharacteristicUserDescription::uuid_16bit());
123    }
124}