ble_peripheral_rust/
uuid.rs

1use uuid::Uuid;
2
3pub trait ShortUuid {
4    fn from_short(uuid: u16) -> Uuid;
5
6    fn from_string(uuid_str: &str) -> Uuid;
7}
8
9impl ShortUuid for Uuid {
10    fn from_short(uuid: u16) -> Uuid {
11        return Uuid::from_fields(uuid.into(), 0, 0x1000, b"\x80\x00\x00\x80\x5F\x9B\x34\xFB");
12    }
13
14    fn from_string(uuid_str: &str) -> Uuid {
15        let uuid = uuid_str.to_string();
16        match Uuid::parse_str(&uuid.clone()) {
17            Ok(uuid) => uuid,
18            Err(_) => {
19                let long_uuid_str = match uuid.len() {
20                    4 => format!("0000{}-0000-1000-8000-00805f9b34fb", uuid),
21                    8 => format!("{}-0000-1000-8000-00805f9b34fb", uuid),
22                    _ => uuid.clone(),
23                };
24                Uuid::parse_str(&long_uuid_str)
25                    .unwrap_or_else(|_| panic!("Invalid UUID string: {}", uuid))
26            }
27        }
28    }
29}