rosu_v2/request/
replay.rs

1use crate::{
2    future::BytesWrap,
3    model::{CacheUserFn, ContainedUsers, GameMode},
4    routing::Route,
5    Osu,
6};
7
8use super::Request;
9
10/// Get a raw replay as a `Vec<u8>`
11#[must_use = "requests must be configured and executed"]
12pub struct GetReplayRaw<'a> {
13    osu: &'a Osu,
14    mode: Option<GameMode>,
15    score_id: u64,
16}
17
18impl<'a> GetReplayRaw<'a> {
19    pub(crate) const fn new(osu: &'a Osu, score_id: u64) -> Self {
20        Self {
21            osu,
22            mode: None,
23            score_id,
24        }
25    }
26
27    /// Specify the mode
28    #[inline]
29    pub const fn mode(mut self, mode: GameMode) -> Self {
30        self.mode = Some(mode);
31
32        self
33    }
34}
35
36into_future! {
37    |self: GetReplayRaw<'_>| -> BytesWrap {
38        Request::new(Route::GetReplay {
39            mode: self.mode,
40            score_id: self.score_id,
41        })
42    } => |bytes, _| -> Vec<u8> {
43        Ok(Vec::from(bytes.0))
44    }
45}
46
47impl ContainedUsers for Vec<u8> {
48    fn apply_to_users(&self, _: impl CacheUserFn) {}
49}
50
51/// Get a [`Replay`].
52///
53/// [`Replay`]: osu_db::Replay
54#[cfg(feature = "replay")]
55#[cfg_attr(docsrs, doc(cfg(feature = "replay")))]
56#[must_use = "requests must be configured and executed"]
57pub struct GetReplay<'a> {
58    osu: &'a Osu,
59    mode: Option<GameMode>,
60    score_id: u64,
61}
62
63#[cfg(feature = "replay")]
64impl<'a> GetReplay<'a> {
65    pub(crate) const fn new(osu: &'a Osu, score_id: u64) -> Self {
66        Self {
67            osu,
68            mode: None,
69            score_id,
70        }
71    }
72
73    /// Specify the mode
74    #[inline]
75    pub const fn mode(mut self, mode: GameMode) -> Self {
76        self.mode = Some(mode);
77
78        self
79    }
80}
81
82#[cfg(feature = "replay")]
83into_future! {
84    |self: GetReplay<'_>| -> BytesWrap {
85        Request::new(Route::GetReplay {
86            mode: self.mode,
87            score_id: self.score_id,
88        })
89    } => |bytes, _| -> osu_db::Replay {
90        osu_db::Replay::from_bytes(&bytes.0).map_err(crate::error::OsuError::from)
91    }
92}
93
94#[cfg(feature = "replay")]
95impl ContainedUsers for osu_db::Replay {
96    fn apply_to_users(&self, _: impl CacheUserFn) {}
97}