From fb98e6b460b944773cc0194f760573b8a31f7d10 Mon Sep 17 00:00:00 2001 From: Henry Schimke Date: Thu, 8 Sep 2022 14:18:18 -0500 Subject: [PATCH] SMSTOMMSTO parser --- src/client/mod.rs | 2 +- src/client/result/ResultParser.rs | 30 +++++++------ ...tParser.java => SMSTOMMSTOResultParser.rs} | 44 ++++++++++--------- src/client/result/mod.rs | 1 + 4 files changed, 43 insertions(+), 34 deletions(-) rename src/client/result/{SMSTOMMSTOResultParser.java => SMSTOMMSTOResultParser.rs} (51%) diff --git a/src/client/mod.rs b/src/client/mod.rs index a1b8547..d11ca02 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -1 +1 @@ -mod result; \ No newline at end of file +pub mod result; \ No newline at end of file diff --git a/src/client/result/ResultParser.rs b/src/client/result/ResultParser.rs index 48fb872..3ba8d4b 100644 --- a/src/client/result/ResultParser.rs +++ b/src/client/result/ResultParser.rs @@ -34,9 +34,9 @@ use urlencoding::decode; use crate::{exceptions::Exceptions, RXingResult}; use super::{ - GeoResultParser, ISBNResultParser, ParsedClientResult, ParsedRXingResult, ProductResultParser, - SMSMMSResultParser, TelResultParser, TextParsedRXingResult, URIResultParser, URLTOResultParser, - WifiResultParser, BookmarkDoCoMoResultParser, + BookmarkDoCoMoResultParser, GeoResultParser, ISBNResultParser, ParsedClientResult, + ParsedRXingResult, ProductResultParser, SMSMMSResultParser, TelResultParser, + TextParsedRXingResult, URIResultParser, URLTOResultParser, WifiResultParser, }; /** @@ -103,7 +103,7 @@ pub fn getMassagedText(result: &RXingResult) -> String { } pub fn parseRXingResult(theRXingResult: &RXingResult) -> ParsedClientResult { - let PARSERS: [&ParserFunction; 9] = [ + let PARSERS: [&ParserFunction; 10] = [ &BookmarkDoCoMoResultParser::parse, // new AddressBookDoCoMoRXingResultParser(), // new EmailDoCoMoRXingResultParser(), @@ -115,7 +115,7 @@ pub fn parseRXingResult(theRXingResult: &RXingResult) -> ParsedClientResult { // new SMTPRXingResultParser(), &TelResultParser::parse, &SMSMMSResultParser::parse, - // new SMSTOMMSTORXingResultParser(), + &SMSMMSResultParser::parse, &GeoResultParser::parse, &WifiResultParser::parse, &URLTOResultParser::parse, @@ -222,13 +222,13 @@ pub fn isSubstringOfDigits(value: &str, offset: usize, length: usize) -> bool { let matcher = Regex::new(DIGITS).unwrap(); let sub_seq = &value[offset as usize..max]; - let is_a_match = if let Some(mtch) = matcher.find(sub_seq){ + let is_a_match = if let Some(mtch) = matcher.find(sub_seq) { if mtch.start() == 0 && mtch.end() == sub_seq.len() { true - }else { + } else { false } - }else{ + } else { false }; @@ -393,10 +393,14 @@ pub fn matchSinglePrefixedField( // return matches == null ? null : matches[0]; } -pub fn match_do_co_mo_prefixed_field( prefix:&str, raw_text:&str) -> Option> { +pub fn match_do_co_mo_prefixed_field(prefix: &str, raw_text: &str) -> Option> { matchPrefixedField(prefix, raw_text, ';', true) - } +} - pub fn match_single_do_co_mo_prefixed_field( prefix:&str, raw_text:&str, trim:bool) -> Option{ - matchSinglePrefixedField(prefix, raw_text, ';', trim) - } \ No newline at end of file +pub fn match_single_do_co_mo_prefixed_field( + prefix: &str, + raw_text: &str, + trim: bool, +) -> Option { + matchSinglePrefixedField(prefix, raw_text, ';', trim) +} diff --git a/src/client/result/SMSTOMMSTOResultParser.java b/src/client/result/SMSTOMMSTOResultParser.rs similarity index 51% rename from src/client/result/SMSTOMMSTOResultParser.java rename to src/client/result/SMSTOMMSTOResultParser.rs index 77d97bc..40d22e8 100644 --- a/src/client/result/SMSTOMMSTOResultParser.java +++ b/src/client/result/SMSTOMMSTOResultParser.rs @@ -14,9 +14,13 @@ * limitations under the License. */ -package com.google.zxing.client.result; +// package com.google.zxing.client.result; -import com.google.zxing.RXingResult; +// import com.google.zxing.RXingResult; + +use crate::RXingResult; + +use super::{ParsedClientResult, ResultParser, SMSParsedRXingResult}; /** *

Parses an "smsto:" URI result, whose format is not standardized but appears to be like: @@ -28,25 +32,25 @@ import com.google.zxing.RXingResult; * * @author Sean Owen */ -public final class SMSTOMMSTORXingResultParser extends RXingResultParser { - - @Override - public SMSParsedRXingResult parse(RXingResult result) { - String rawText = getMassagedText(result); - if (!(rawText.startsWith("smsto:") || rawText.startsWith("SMSTO:") || - rawText.startsWith("mmsto:") || rawText.startsWith("MMSTO:"))) { - return null; + pub fn parse(result:&RXingResult) -> Option { + let rawText = ResultParser::getMassagedText(result); + if !(rawText.starts_with("smsto:") || rawText.starts_with("SMSTO:") || + rawText.starts_with("mmsto:") || rawText.starts_with("MMSTO:")) { + return None; } // Thanks to dominik.wild for suggesting this enhancement to support // smsto:number:body URIs - String number = rawText.substring(6); - String body = null; - int bodyStart = number.indexOf(':'); - if (bodyStart >= 0) { - body = number.substring(bodyStart + 1); - number = number.substring(0, bodyStart); + let mut number = &rawText[6..]; + let mut body = ""; + if let Some(body_start) = number.find(':') { + body = &number[body_start + 1..]; + number = &number[..body_start]; } - return new SMSParsedRXingResult(number, null, null, body); - } - -} \ No newline at end of file + // let bodyStart = number.indexOf(':'); + // if (bodyStart >= 0) { + // body = number.substring(bodyStart + 1); + // number = number.substring(0, bodyStart); + // } + Some(ParsedClientResult::SMSResult(SMSParsedRXingResult::with_singles(number.to_owned(), String::from(""), String::from(""), body.to_owned()))) + // return new SMSParsedRXingResult(number, null, null, body); + } \ No newline at end of file diff --git a/src/client/result/mod.rs b/src/client/result/mod.rs index de35c63..2683029 100644 --- a/src/client/result/mod.rs +++ b/src/client/result/mod.rs @@ -19,6 +19,7 @@ mod URIResultParser; mod URLTOResultParser; mod AbstractDoCoMoResultParser; mod BookmarkDoCoMoResultParser; +mod SMSTOMMSTOResultParser; use std::fmt;