decode_sms/
decode_sms.rs

1//! Example: Decoding SMS PDU messages
2//!
3//! Run with: cargo run --example decode_sms
4
5use sms_pdu_decoder::{read_incoming_sms, Gsm7Bit, SmsDeliver, Ucs2};
6
7fn main() {
8    println!("=== SMS PDU Decoder Examples ===\n");
9
10    // Example 1: Simple API
11    example_simple_api();
12
13    // Example 2: Detailed API
14    example_detailed_api();
15
16    // Example 3: Direct codec usage
17    example_codecs();
18
19    // Example 4: Multiple messages
20    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    // GSM 7-bit
80    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    // Another GSM 7-bit example
88    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    // UCS2
97    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        // Add more PDU examples here
113    ];
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}