1use sms_pdu_decoder::{read_incoming_sms, Gsm7Bit, SmsDeliver, Ucs2};
6
7fn main() {
8 println!("=== SMS PDU Decoder Examples ===\n");
9
10 example_simple_api();
12
13 example_detailed_api();
15
16 example_codecs();
18
19 example_multiple_messages();
21}
22
23fn example_simple_api() {
24 println!("--- Example 1: Simple API ---");
25
26 let pdu = "07916407058099F9040B916407950303F100008921222140140004D4E2940A";
27
28 match read_incoming_sms(pdu) {
29 Ok(sms) => {
30 println!("From: {}", sms.sender);
31 println!("Message: {}", sms.content);
32 println!("Date: {}", sms.date);
33 println!("Is partial: {}", sms.partial.is_some());
34 }
35 Err(e) => eprintln!("Error: {}", e),
36 }
37 println!();
38}
39
40fn example_detailed_api() {
41 println!("--- Example 2: Detailed API ---");
42
43 let pdu = "07916407058099F9040B916407950303F100008921222140140004D4E2940A";
44
45 match SmsDeliver::decode(pdu) {
46 Ok(sms) => {
47 if let Some(ref number) = sms.smsc.number {
48 println!("SMSC Number: {}", number);
49 }
50 if let Some(ref toa) = sms.smsc.toa {
51 println!("SMSC TON: {}", toa.ton);
52 println!("SMSC NPI: {}", toa.npi);
53 }
54 println!();
55 println!("Sender Number: {}", sms.sender.number);
56 println!("Sender TON: {}", sms.sender.toa.ton);
57 println!();
58 println!("Message Type: {}", sms.header.mti);
59 println!("Has UDH: {}", sms.header.udhi);
60 println!("More Messages: {}", sms.header.mms);
61 println!();
62 println!("Protocol ID: {}", sms.pid);
63 println!("Encoding: {}", sms.dcs.encoding);
64 println!();
65 println!("Timestamp: {}", sms.scts);
66 println!("Timestamp (RFC3339): {}", sms.scts.to_rfc3339());
67 println!();
68 println!("Message: {}", sms.user_data.data);
69 println!("Has Header: {}", sms.user_data.header.is_some());
70 }
71 Err(e) => eprintln!("Error: {}", e),
72 }
73 println!();
74}
75
76fn example_codecs() {
77 println!("--- Example 3: Direct Codec Usage ---");
78
79 println!("GSM 7-bit decoding:");
81 let gsm_hex = "C8F71D14969741F977FD07";
82 match Gsm7Bit::decode(gsm_hex, false) {
83 Ok(text) => println!(" '{}' -> '{}'", gsm_hex, text),
84 Err(e) => eprintln!(" Error: {}", e),
85 }
86
87 let gsm_hex2 = "D4E2940A";
89 match Gsm7Bit::decode(gsm_hex2, false) {
90 Ok(text) => println!(" '{}' -> '{}'", gsm_hex2, text),
91 Err(e) => eprintln!(" Error: {}", e),
92 }
93
94 println!();
95
96 println!("UCS2 (Unicode) decoding:");
98 let ucs2_hex = "004C006F00720065006D00200049007000730075006D";
99 match Ucs2::decode(ucs2_hex) {
100 Ok(text) => println!(" '{}' -> '{}'", ucs2_hex, text),
101 Err(e) => eprintln!(" Error: {}", e),
102 }
103
104 println!();
105}
106
107fn example_multiple_messages() {
108 println!("--- Example 4: Processing Multiple Messages ---");
109
110 let pdus = [
111 "07916407058099F9040B916407950303F100008921222140140004D4E2940A",
112 ];
114
115 for (i, pdu) in pdus.iter().enumerate() {
116 println!("Message {}:", i + 1);
117 match read_incoming_sms(pdu) {
118 Ok(sms) => {
119 println!(" From: {}", sms.sender);
120 println!(" Content: {}", sms.content);
121 println!(" Date: {}", sms.date.format("%Y-%m-%d %H:%M:%S"));
122 }
123 Err(e) => eprintln!(" Error: {}", e),
124 }
125 println!();
126 }
127}