azservicebus 0.25.1

An unofficial AMQP 1.0 rust client for Azure Service Bus
Documentation
use fe2o3_amqp_management::{error::InvalidType, response::Response};
use fe2o3_amqp_types::primitives::{Binary, OrderedMap};

use crate::amqp::management_constants::properties::SESSION_STATE;

type GetSessionStateResponseBody = OrderedMap<String, Binary>;

pub(crate) struct GetSessionStateResponse {
    pub session_state: Binary,
}

impl Response for GetSessionStateResponse {
    const STATUS_CODE: u16 = 200;

    type Body = Option<GetSessionStateResponseBody>;

    type Error = super::ManagementError;

    fn decode_message(
        message: fe2o3_amqp_types::messaging::Message<Self::Body>,
    ) -> Result<Self, Self::Error> {
        let session_state = message
            .body
            .ok_or(Self::Error::DecodeError(None))?
            .swap_remove(SESSION_STATE)
            .ok_or_else(|| InvalidType {
                expected: SESSION_STATE.to_string(),
                actual: "None".to_string(),
            })?;

        Ok(Self { session_state })
    }
}