rosu_render/model/
event.rs

1use bytes::Bytes;
2use hyper::StatusCode;
3use serde::Deserialize;
4
5use crate::{client::error::ErrorCode, request::Requestable, ClientError};
6
7/// Deserialized [`Event`](crate::model::Event) received through the websocket.
8#[derive(Clone, Debug, PartialEq, Eq)]
9#[non_exhaustive]
10pub enum Event {
11    RenderAdded(RenderAdded),
12    RenderProgress(RenderProgress),
13    RenderFailed(RenderFailed),
14    RenderDone(RenderDone),
15    CustomSkinProcessUpdate(CustomSkinProcessUpdate),
16}
17
18/// Data that is received in `render_added_json` websocket events.
19///
20/// Also the response of the server when the render got created successfully.
21#[derive(Copy, Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
22pub struct RenderAdded {
23    /// The render ID of your render that got created.
24    #[serde(rename = "renderID")]
25    pub render_id: u32,
26}
27
28impl Requestable for RenderAdded {
29    fn response_error(status: StatusCode, bytes: Bytes) -> ClientError {
30        ClientError::response_error(bytes, status.as_u16())
31    }
32}
33
34/// Data that is received in `render_done_json` websocket events.
35#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
36pub struct RenderDone {
37    /// The id of the render.
38    #[serde(rename = "renderID")]
39    pub render_id: u32,
40    /// The url of the rendered video.
41    #[serde(rename = "videoUrl")]
42    pub video_url: Box<str>,
43}
44
45/// Data that is received in `render_failed_json` websocket events.
46#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
47#[serde(rename_all = "camelCase")]
48pub struct RenderFailed {
49    /// The id of the render.
50    #[serde(rename = "renderID")]
51    pub render_id: u32,
52    /// The error code as specified by o!rdr.
53    pub error_code: Option<ErrorCode>,
54    /// An error message.
55    pub error_message: Box<str>,
56}
57
58/// Data that is received in `render_progress_json` websocket events.
59#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
60pub struct RenderProgress {
61    /// Description of the replay.
62    pub description: Box<str>,
63    /// Current render status.
64    pub progress: Box<str>,
65    /// The id of the render.
66    #[serde(rename = "renderID")]
67    pub render_id: u32,
68    /// Server that renders the replay.
69    pub renderer: Box<str>,
70    /// User that commissioned the render.
71    pub username: Box<str>,
72}
73
74/// Data that is received in `custom_skin_process_update` websocket events.
75#[derive(Copy, Clone, Debug, Deserialize, PartialEq, Eq, Hash)]
76pub struct CustomSkinProcessUpdate {
77    /// The id of the skin that was processed.
78    #[serde(rename = "skinId")]
79    skin_id: u32,
80}