rosu_v2/request/
replay.rs1use crate::{
2 future::BytesWrap,
3 model::{CacheUserFn, ContainedUsers, GameMode},
4 routing::Route,
5 Osu,
6};
7
8use super::Request;
9
10#[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 #[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#[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 #[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}