use rusmpp_macros::Rusmpp;
use crate::{
pdus::borrowed::Pdu,
types::borrowed::{COctetString, EmptyOrFullCOctetString},
values::*,
};
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
#[rusmpp(decode = borrowed, test = skip)]
#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
pub struct QuerySmResp<'a> {
pub message_id: COctetString<'a, 1, 65>,
pub final_date: EmptyOrFullCOctetString<'a, 17>,
pub message_state: MessageState,
pub error_code: u8,
}
impl<'a> QuerySmResp<'a> {
pub fn new(
message_id: COctetString<'a, 1, 65>,
final_date: EmptyOrFullCOctetString<'a, 17>,
message_state: MessageState,
error_code: u8,
) -> Self {
Self {
message_id,
final_date,
message_state,
error_code,
}
}
pub fn builder() -> QuerySmRespBuilder<'a> {
QuerySmRespBuilder::new()
}
}
impl<'a, const N: usize> From<QuerySmResp<'a>> for Pdu<'a, N> {
fn from(value: QuerySmResp<'a>) -> Self {
Self::QuerySmResp(value)
}
}
#[derive(Debug, Default)]
pub struct QuerySmRespBuilder<'a> {
inner: QuerySmResp<'a>,
}
impl<'a> QuerySmRespBuilder<'a> {
pub fn new() -> Self {
Self::default()
}
pub fn message_id(mut self, message_id: COctetString<'a, 1, 65>) -> Self {
self.inner.message_id = message_id;
self
}
pub fn final_date(mut self, final_date: EmptyOrFullCOctetString<'a, 17>) -> Self {
self.inner.final_date = final_date;
self
}
pub fn message_state(mut self, message_state: MessageState) -> Self {
self.inner.message_state = message_state;
self
}
pub fn error_code(mut self, error_code: u8) -> Self {
self.inner.error_code = error_code;
self
}
pub fn build(self) -> QuerySmResp<'a> {
self.inner
}
}
#[cfg(test)]
mod tests {
use crate::tests::TestInstance;
use super::*;
impl TestInstance for QuerySmResp<'_> {
fn instances() -> alloc::vec::Vec<Self> {
alloc::vec![
Self::default(),
Self::builder()
.message_id(COctetString::new(b"123456789012345678901234\0").unwrap())
.final_date(EmptyOrFullCOctetString::new(b"2023-10-01T12:00\0").unwrap())
.message_state(MessageState::Delivered)
.error_code(0)
.build(),
]
}
}
#[test]
fn encode_decode() {
crate::tests::borrowed::encode_decode_test_instances::<QuerySmResp>();
}
}