use bytes::Bytes;
use hyper::StatusCode;
use serde::Deserialize;
use crate::{client::error::ErrorCode, request::Requestable, ClientError};
#[derive(Clone, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum Event {
RenderAdded(RenderAdded),
RenderProgress(RenderProgress),
RenderFailed(RenderFailed),
RenderDone(RenderDone),
CustomSkinProcessUpdate(CustomSkinProcessUpdate),
}
#[derive(Copy, Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
pub struct RenderAdded {
#[serde(rename = "renderID")]
pub render_id: u32,
}
impl Requestable for RenderAdded {
fn response_error(status: StatusCode, bytes: Bytes) -> ClientError {
ClientError::response_error(bytes, status.as_u16())
}
}
#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
pub struct RenderDone {
#[serde(rename = "renderID")]
pub render_id: u32,
#[serde(rename = "videoUrl")]
pub video_url: Box<str>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
pub struct RenderFailed {
#[serde(rename = "renderID")]
pub render_id: u32,
pub error_code: Option<ErrorCode>,
pub error_message: Box<str>,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
pub struct RenderProgress {
pub description: Box<str>,
pub progress: Box<str>,
#[serde(rename = "renderID")]
pub render_id: u32,
pub renderer: Box<str>,
pub username: Box<str>,
}
#[derive(Copy, Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
pub struct CustomSkinProcessUpdate {
#[serde(rename = "skinId")]
skin_id: u32,
}