use crate::core::{
service_response::{APIErrorBody, APISuccessBody},
PubNubError,
};
use crate::lib::alloc::string::String;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct GrantTokenResult {
pub token: String,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct RevokeTokenResult;
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(untagged))]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum GrantTokenResponseBody {
SuccessResponse(APISuccessBody<GrantTokenResponseBodyPayload>),
ErrorResponse(APIErrorBody),
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(untagged))]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RevokeTokenResponseBody {
SuccessResponse(APISuccessBody<RevokeTokenResponseBodyPayload>),
ErrorResponse(APIErrorBody),
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct GrantTokenResponseBodyPayload {
message: String,
token: String,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct RevokeTokenResponseBodyPayload {
message: String,
}
impl TryFrom<RevokeTokenResponseBody> for RevokeTokenResult {
type Error = PubNubError;
fn try_from(value: RevokeTokenResponseBody) -> Result<Self, Self::Error> {
match value {
RevokeTokenResponseBody::SuccessResponse(_) => Ok(RevokeTokenResult),
RevokeTokenResponseBody::ErrorResponse(resp) => Err(resp.into()),
}
}
}
impl TryFrom<GrantTokenResponseBody> for GrantTokenResult {
type Error = PubNubError;
fn try_from(value: GrantTokenResponseBody) -> Result<Self, Self::Error> {
match value {
GrantTokenResponseBody::SuccessResponse(resp) => Ok(GrantTokenResult {
token: resp.data.token,
}),
GrantTokenResponseBody::ErrorResponse(resp) => Err(resp.into()),
}
}
}