diff --git a/src/client/result/ResultParser.rs b/src/client/result/ResultParser.rs index 0e309d7..d295f7d 100644 --- a/src/client/result/ResultParser.rs +++ b/src/client/result/ResultParser.rs @@ -34,8 +34,8 @@ use urlencoding::decode; use crate::{exceptions::Exceptions, RXingResult}; use super::{ - ISBNResultParser, ParsedClientResult, ParsedRXingResult, TelResultParser, - TextParsedRXingResult, WifiResultParser, GeoResultParser, SMSMMSResultParser + GeoResultParser, ISBNResultParser, ParsedClientResult, ParsedRXingResult, SMSMMSResultParser, + TelResultParser, TextParsedRXingResult, WifiResultParser, }; /** @@ -115,7 +115,7 @@ pub fn parseRXingResult(theRXingResult: &RXingResult) -> ParsedClientResult { &TelResultParser::parse, &SMSMMSResultParser::parse, // new SMSTOMMSTORXingResultParser(), - &GeoResultParser::parse, + &GeoResultParser::parse, &WifiResultParser::parse, // new URLTORXingResultParser(), // new URIRXingResultParser(), @@ -154,8 +154,10 @@ pub fn maybe_append_multiple(value: &[String], result: &mut String) { if !value.is_empty() { for s in value { // for (String s : value) { - result.push('\n'); - result.push_str(s); + if !s.is_empty() { + result.push('\n'); + result.push_str(s); + } } } } @@ -285,7 +287,7 @@ pub fn matchPrefixedField( let max = rawText.len(); while i < max { i = if let Some(loc) = rawText[i..].find(prefix) { - loc+i + loc + i } else { break; }; diff --git a/src/client/result/SMSMMSParsedResultTestCase.rs b/src/client/result/SMSMMSParsedResultTestCase.rs index 7952f3e..9689046 100644 --- a/src/client/result/SMSMMSParsedResultTestCase.rs +++ b/src/client/result/SMSMMSParsedResultTestCase.rs @@ -84,7 +84,12 @@ fn do_test(contents: &str, number: &str, subject: &str, body: &str, via: &str, p assert_eq!(&vec![number], smsRXingResult.getNumbers()); assert_eq!(subject, smsRXingResult.getSubject()); assert_eq!(body, smsRXingResult.getBody()); - assert_eq!(&vec![via], smsRXingResult.getVias()); + let vec_via = if via.is_empty() { + vec![] + }else { + vec![via] + }; + assert_eq!(&vec_via, smsRXingResult.getVias()); assert_eq!(parsedURI, smsRXingResult.getSMSURI()); } else { panic!("Expected ParsedClientResult::SMSResult"); diff --git a/src/client/result/SMSMMSResultParser.rs b/src/client/result/SMSMMSResultParser.rs index 253f5d5..3ce9e14 100644 --- a/src/client/result/SMSMMSResultParser.rs +++ b/src/client/result/SMSMMSResultParser.rs @@ -45,11 +45,11 @@ use super::{ParsedClientResult, ResultParser, SMSParsedRXingResult}; // @Override pub fn parse(result: &RXingResult) -> Option { - let rawText = ResultParser::getMassagedText(result); - if !(rawText.starts_with("sms:") - || rawText.starts_with("SMS:") - || rawText.starts_with("mms:") - || rawText.starts_with("MMS:")) + let raw_text = ResultParser::getMassagedText(result); + if !(raw_text.starts_with("sms:") + || raw_text.starts_with("SMS:") + || raw_text.starts_with("mms:") + || raw_text.starts_with("MMS:")) { return None; } @@ -59,7 +59,7 @@ pub fn parse(result: &RXingResult) -> Option { let mut querySyntax = false; // Check up front if this is a URI syntax string with query arguments - if let Some(name_value_pairs) = ResultParser::parseNameValuePairs(&rawText) { + if let Some(name_value_pairs) = ResultParser::parseNameValuePairs(&raw_text) { if !name_value_pairs.is_empty() { subject = String::from(name_value_pairs.get("subject").unwrap_or(&"".to_owned())); body = String::from(name_value_pairs.get("body").unwrap_or(&"".to_owned())); @@ -68,34 +68,34 @@ pub fn parse(result: &RXingResult) -> Option { } // Drop sms, query portion - let query_start = rawText[4..].find('?'); + let query_start = raw_text[4..].find('?'); let sms_uriwithout_query; // If it's not query syntax, the question mark is part of the subject or message if query_start.is_none() || !querySyntax { - sms_uriwithout_query = &rawText[4..]; + sms_uriwithout_query = &raw_text[4..]; } else { - sms_uriwithout_query = &rawText[4..4 + query_start.unwrap_or(0)]; + sms_uriwithout_query = &raw_text[4..4 + query_start.unwrap_or(0)]; } - let mut lastComma: i32 = -1; - let mut comma: i32 = sms_uriwithout_query[(lastComma + 1) as usize..] + let mut last_comma: i32 = -1; + let mut comma: i32 = sms_uriwithout_query[(last_comma + 1) as usize..] .find(',') .unwrap_or(0) as i32; let mut numbers = Vec::with_capacity(1); let mut vias = Vec::with_capacity(1); - while comma > lastComma { - comma = sms_uriwithout_query[(lastComma + 1) as usize..] + while comma > last_comma { + comma = sms_uriwithout_query[(last_comma + 1) as usize..] .find(',') .unwrap_or(0) as i32; //sms_uriwithout_query.indexOf(',', lastComma + 1); - let numberPart = - &sms_uriwithout_query[(lastComma + 1) as usize..(lastComma + 1 + comma) as usize]; - addNumberVia(&mut numbers, &mut vias, numberPart); - lastComma = comma; + let number_part = + &sms_uriwithout_query[(last_comma + 1) as usize..(last_comma + 1 + comma) as usize]; + add_number_via(&mut numbers, &mut vias, number_part); + last_comma = comma; } - addNumberVia( + add_number_via( &mut numbers, &mut vias, - &sms_uriwithout_query[(lastComma + 1) as usize..], + &sms_uriwithout_query[(last_comma) as usize..], ); Some(ParsedClientResult::SMSResult( @@ -108,20 +108,25 @@ pub fn parse(result: &RXingResult) -> Option { // body); } -fn addNumberVia(numbers: &mut Vec, vias: &mut Vec, numberPart: &str) { - if let Some(numberEnd) = numberPart.find(';') { +fn add_number_via(numbers: &mut Vec, vias: &mut Vec, number_part: &str) { + if number_part.is_empty() { + return + } + if let Some(number_end) = number_part.find(';') { // if numberEnd < 0 { - numbers.push(numberPart[..numberEnd].to_string()); - let maybeVia = &numberPart[numberEnd + 1..]; - let via = if maybeVia.starts_with("via=") { - &maybeVia[..4] + numbers.push(number_part[..number_end].to_string()); + let maybe_via = &number_part[number_end + 1..]; + let via = if maybe_via.starts_with("via=") { + &maybe_via[4..] } else { "" }; - vias.push(via.to_owned()); + if !via.is_empty() { + vias.push(via.to_owned()); + } } else { - numbers.push(numberPart.to_owned()); - vias.push("".to_owned()); + numbers.push(number_part.to_owned()); + //vias.push("".to_owned()); } } diff --git a/src/client/result/SMSParsedResult.rs b/src/client/result/SMSParsedResult.rs index 286a935..276a8b3 100644 --- a/src/client/result/SMSParsedResult.rs +++ b/src/client/result/SMSParsedResult.rs @@ -92,16 +92,16 @@ impl SMSParsedRXingResult { result.push_str(&self.vias[i]); } } - let hasBody = !self.body.is_empty(); - let hasSubject = !self.subject.is_empty(); - if hasBody || hasSubject { + let has_body = !self.body.is_empty(); + let has_subject = !self.subject.is_empty(); + if has_body || has_subject { result.push('?'); - if hasBody { + if has_body { result.push_str("body="); result.push_str(&self.body); } - if hasSubject { - if hasBody { + if has_subject { + if has_body { result.push('&'); } result.push_str("subject=");