fns-api-client 0.4.5

ФНС API клиент
Documentation
use std::sync::Arc;

use crate::client::error::{FnsApiError, OpenApiClientError};
use crate::dto::ticket_response::{Body, Envelope, SendMessageResponse};
use crate::traits::ticket::{TicketRequestErrorTrait, TicketResponseResult, TicketResponseTrait, MessageTrait};

#[derive(Clone)]
pub(crate) struct TicketResponse {
    result: TicketResponseResult,
}

impl TicketResponse {
    pub(crate) fn new(response_dto: Envelope) -> Result<Arc<dyn TicketResponseTrait>, OpenApiClientError> {
        match response_dto.body {
            Body::Fault(fault) => {
                Err(OpenApiClientError::FnsApiError(FnsApiError { message: fault.faultstring }))
            }
            Body::SendMessageResponse(t) => {
                Ok(TicketResponse::ok(Message::new(t)))
            }
        }
    }
    fn ok(ticket: Arc<dyn MessageTrait>) -> Arc<dyn TicketResponseTrait> {
        Arc::new(TicketResponse { result: TicketResponseResult::Ok(ticket) })
    }
}

impl TicketResponseTrait for TicketResponse {
    fn result(&self) -> TicketResponseResult {
        self.result.clone()
    }
}

struct TicketRequestError {
    message: String,
}

impl TicketRequestError {
    fn new(message: String) -> Arc<dyn TicketRequestErrorTrait> {
        Arc::new(TicketRequestError {
            message
        })
    }
}

impl TicketRequestErrorTrait for TicketRequestError {
    fn message(&self) -> String {
        self.message.clone()
    }
}

#[derive(Clone, Debug)]
pub(super) struct Message{
    id: String
}

impl MessageTrait for Message {
    fn id(&self) -> String {
        self.id.clone()
    }
}

impl Message {
    fn new(response: SendMessageResponse) -> Arc<dyn MessageTrait> {
        Arc::new(Message { id: response.message_id })
    }
}