smpp 0.1.2

SMPP protocol support (client and server).
Documentation
use async_trait::async_trait;
use smpp_pdu::pdu::data::bind_data::BindData;
use smpp_pdu::pdu::PduStatus;
use smpp_pdu::pdu::{SubmitSmPdu, SubmitSmRespPdu};
use std::sync::Arc;
use tokio::sync::Mutex;

use crate::message_unique_key::MessageUniqueKey;
use crate::smsc::Smsc;

pub enum BindError {
    IncorrectPassword,
    InternalError,
}

impl From<BindError> for PduStatus {
    fn from(e: BindError) -> PduStatus {
        match e {
            BindError::IncorrectPassword => PduStatus::ESME_RINVPASWD,
            BindError::InternalError => PduStatus::ESME_RSYSERR,
        }
    }
}

pub enum SubmitSmError {
    InternalError,
}

impl From<SubmitSmError> for PduStatus {
    fn from(e: SubmitSmError) -> PduStatus {
        match e {
            SubmitSmError::InternalError => PduStatus::ESME_RSYSERR,
        }
    }
}

#[async_trait]
pub trait SmscLogic {
    async fn bind(&mut self, bind_data: &BindData) -> Result<(), BindError>;
    async fn submit_sm(
        &mut self,
        smsc: Arc<Mutex<Smsc>>,
        pdu: &SubmitSmPdu,
        sequence_number: u32,
    ) -> Result<(SubmitSmRespPdu, MessageUniqueKey), SubmitSmError>;
}