use crate::RXingResult;
use super::{AddressBookParsedRXingResult, ParsedClientResult, ResultParser};
pub fn parse(result: &RXingResult) -> Option<ParsedClientResult> {
let rawText = ResultParser::getMassagedText(result);
if !rawText.starts_with("BIZCARD:") {
return None;
}
let firstName =
ResultParser::match_single_docomo_prefixed_field("N:", &rawText, true).unwrap_or_default();
let lastName =
ResultParser::match_single_docomo_prefixed_field("X:", &rawText, true).unwrap_or_default();
let fullName = buildName(&firstName, &lastName);
let title =
ResultParser::match_single_docomo_prefixed_field("T:", &rawText, true).unwrap_or_default();
let org =
ResultParser::match_single_docomo_prefixed_field("C:", &rawText, true).unwrap_or_default();
let addresses = ResultParser::match_docomo_prefixed_field("A:", &rawText);
let phoneNumber1 =
ResultParser::match_single_docomo_prefixed_field("B:", &rawText, true).unwrap_or_default();
let phoneNumber2 =
ResultParser::match_single_docomo_prefixed_field("M:", &rawText, true).unwrap_or_default();
let phoneNumber3 =
ResultParser::match_single_docomo_prefixed_field("F:", &rawText, true).unwrap_or_default();
let email =
ResultParser::match_single_docomo_prefixed_field("E:", &rawText, true).unwrap_or_default();
if let Ok(adb) = AddressBookParsedRXingResult::with_details(
ResultParser::maybeWrap(Some(fullName)).unwrap_or_default(),
Vec::new(),
String::default(),
buildPhoneNumbers(phoneNumber1, phoneNumber2, phoneNumber3),
Vec::new(),
ResultParser::maybeWrap(Some(email)).unwrap_or_default(),
Vec::new(),
String::default(),
String::default(),
addresses.unwrap_or_default(),
Vec::new(),
org,
String::default(),
title,
Vec::new(),
Vec::new(),
) {
Some(ParsedClientResult::AddressBookResult(adb))
} else {
None
}
}
fn buildPhoneNumbers(number1: String, number2: String, number3: String) -> Vec<String> {
let mut numbers = Vec::new();
if !number1.is_empty() {
numbers.push(number1);
}
if !number2.is_empty() {
numbers.push(number2);
}
if !number3.is_empty() {
numbers.push(number3);
}
numbers
}
fn buildName(firstName: &str, lastName: &str) -> String {
if firstName.is_empty() {
lastName.to_owned()
} else if lastName.is_empty() {
firstName.to_owned()
} else {
format!("{firstName} {lastName}")
}
}