1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//! Models for managing scheduled bulk sends.
//!
//! These cover both `/sms/1/bulks` (reschedule a pending bulk) and
//! `/sms/1/bulks/status` (pause / resume / cancel a pending bulk).
//!
//! Every operation is keyed on a bulk ID — either one you set yourself
//! via
//! [`crate::models::send::RequestSchedulingSettings::bulk_id`], or one
//! the API auto-assigned and returned in
//! [`crate::models::send::SmsResponse::bulk_id`].
//!
//! # Examples
//!
//! ## Pausing a scheduled bulk
//!
//! ```no_run
//! # use infobip_sms::Client;
//! use infobip_sms::models::bulks::UpdateBulkStatusRequest;
//! use infobip_sms::models::common::BulkStatus;
//!
//! # async fn run(client: Client, bulk_id: &str) -> Result<(), infobip_sms::Error> {
//! client
//! .update_bulk_status(bulk_id, &UpdateBulkStatusRequest { status: BulkStatus::Paused })
//! .await?;
//! # Ok(()) }
//! ```
//!
//! ## Rescheduling a bulk
//!
//! ```no_run
//! # use infobip_sms::Client;
//! use infobip_sms::models::bulks::RescheduleBulkRequest;
//!
//! # async fn run(client: Client, bulk_id: &str) -> Result<(), infobip_sms::Error> {
//! client
//! .reschedule_bulk(
//! bulk_id,
//! &RescheduleBulkRequest {
//! send_at: "2026-12-24T09:00:00.000+0000".into(),
//! },
//! )
//! .await?;
//! # Ok(()) }
//! ```
use ;
use crateBulkStatus;
/// Returned by `GET /sms/1/bulks` and `PUT /sms/1/bulks`.
/// Body of `PUT /sms/1/bulks?bulkId=...` — reschedule a pending bulk.
/// Returned by `GET /sms/1/bulks/status` and `PUT /sms/1/bulks/status`.
/// Body of `PUT /sms/1/bulks/status?bulkId=...` — pause, resume, or
/// cancel.
///
/// Allowed transitions:
/// - `Pending` → `Paused`
/// - `Paused` → `Pending`
/// - `Pending` or `Paused` → `Canceled` (terminal)