submit_sm_multipart_fallback/
submit_sm_multipart_fallback.rs

1//! Run with
2//!
3//! ```not_rust
4//! cargo run -p rusmpp-extra --example submit_sm_multipart_fallback --features="alloc,concatenation"
5//! ```
6
7use std::str::FromStr;
8
9use rusmpp_core::{
10    pdus::owned::SubmitSm,
11    types::owned::COctetString,
12    values::{Npi, Ton},
13};
14use rusmpp_extra::{
15    concatenation::owned::SubmitSmMultipartExt,
16    encoding::{
17        gsm7bit::{Gsm7BitAlphabet, Gsm7BitUnpacked},
18        ucs2::Ucs2,
19    },
20};
21
22fn main() -> Result<(), Box<dyn core::error::Error>> {
23    let multipart = SubmitSm::builder()
24        .source_addr_ton(Ton::Unknown)
25        .source_addr_npi(Npi::Unknown)
26        .source_addr(COctetString::from_str("12345")?)
27        .destination_addr(COctetString::from_str("491701234567")?)
28        .build()
29        .multipart("Hi This message can not be encoded in gsm 7-bit default alphabet so it will fallback to ucs2: 你好")
30        .encoder(Gsm7BitUnpacked::new().with_alphabet(Gsm7BitAlphabet::default()))
31        .fallback(Ucs2::new())
32        .build()?;
33
34    let total = multipart.len();
35
36    println!("Submitting multipart message: total {total}");
37
38    for (i, sm) in multipart.into_iter().enumerate() {
39        assert_eq!(sm.data_coding, Ucs2::new().data_coding());
40
41        println!(
42            "Submitting part {}: short_message_len = {}, esm_class = {:?}, data_coding = {:?}, short_message = {:?}",
43            i + 1,
44            sm.short_message().len(),
45            sm.esm_class,
46            sm.data_coding,
47            sm.short_message()
48        );
49        println!()
50    }
51
52    Ok(())
53}