ble_peripheral_rust/
uuid.rs1use 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}