imessage_database/util/
bundle_id.rspub fn parse_balloon_bundle_id(bundle_id: Option<&str>) -> Option<&str> {
bundle_id.and_then(|id| {
let mut parts = id.split(':');
let first = parts.next();
match parts.next() {
None => first,
Some(_) => parts.next(),
}
})
}
#[cfg(test)]
mod tests {
use crate::util::bundle_id::parse_balloon_bundle_id;
#[test]
fn can_get_no_balloon_bundle_id() {
assert_eq!(parse_balloon_bundle_id(None), None);
}
#[test]
fn can_get_balloon_bundle_id_os() {
assert_eq!(
parse_balloon_bundle_id(Some("com.apple.Handwriting.HandwritingProvider")),
Some("com.apple.Handwriting.HandwritingProvider")
);
}
#[test]
fn can_get_balloon_bundle_id_url() {
assert_eq!(
parse_balloon_bundle_id(Some("com.apple.messages.URLBalloonProvider")),
Some("com.apple.messages.URLBalloonProvider")
);
}
#[test]
fn can_get_balloon_bundle_id_apple() {
assert_eq!(
parse_balloon_bundle_id(Some("com.apple.messages.MSMessageExtensionBalloonPlugin:0000000000:com.apple.PassbookUIService.PeerPaymentMessagesExtension")),
Some("com.apple.PassbookUIService.PeerPaymentMessagesExtension")
);
}
#[test]
fn can_get_balloon_bundle_id_third_party() {
assert_eq!(
parse_balloon_bundle_id(Some("com.apple.messages.MSMessageExtensionBalloonPlugin:QPU8QS3E62:com.contextoptional.OpenTable.Messages")),
Some("com.contextoptional.OpenTable.Messages")
);
}
}