misskey_util/builder/
user.rs1use crate::pager::{BoxPager, OffsetPager, PagerStream};
2
3use misskey_api::endpoint;
4use misskey_api::model::{
5 sort::SortOrder,
6 user::{User, UserOrigin, UserSortKey},
7};
8use misskey_core::Client;
9
10pub struct UserListBuilder<C> {
12 client: C,
13 request: endpoint::users::Request,
14}
15
16impl<C> UserListBuilder<C> {
17 pub fn new(client: C) -> Self {
19 let request = endpoint::users::Request::default();
20 UserListBuilder { client, request }
21 }
22
23 pub fn as_request(&self) -> &endpoint::users::Request {
25 &self.request
26 }
27
28 pub fn order(&mut self, order: SortOrder<UserSortKey>) -> &mut Self {
30 self.request.sort.replace(order);
31 self
32 }
33
34 pub fn sort_by(&mut self, key: UserSortKey) -> &mut Self {
36 self.order(SortOrder::Ascending(key))
37 }
38
39 pub fn sort_by_followers(&mut self) -> &mut Self {
43 self.sort_by(UserSortKey::Follower)
44 }
45
46 pub fn sort_by_creation_date(&mut self) -> &mut Self {
50 self.sort_by(UserSortKey::CreatedAt)
51 }
52
53 pub fn sort_by_update_date(&mut self) -> &mut Self {
57 self.sort_by(UserSortKey::UpdatedAt)
58 }
59
60 pub fn origin(&mut self, origin: UserOrigin) -> &mut Self {
62 self.request.origin.replace(origin);
63 self
64 }
65
66 pub fn local(&mut self) -> &mut Self {
70 self.origin(UserOrigin::Local)
71 }
72
73 pub fn remote(&mut self) -> &mut Self {
77 self.origin(UserOrigin::Remote)
78 }
79
80 pub fn moderator(&mut self) -> &mut Self {
82 self.request
83 .state
84 .replace(endpoint::users::UserState::Moderator);
85 self
86 }
87
88 pub fn alive(&mut self) -> &mut Self {
90 self.request
91 .state
92 .replace(endpoint::users::UserState::Alive);
93 self
94 }
95
96 pub fn admin(&mut self) -> &mut Self {
98 self.request
99 .state
100 .replace(endpoint::users::UserState::Admin);
101 self
102 }
103
104 pub fn admin_or_moderator(&mut self) -> &mut Self {
106 self.request
107 .state
108 .replace(endpoint::users::UserState::AdminOrModerator);
109 self
110 }
111}
112
113impl<C: Client + Sync> UserListBuilder<C> {
114 pub fn list(&self) -> PagerStream<BoxPager<C, User>> {
116 let pager = OffsetPager::new(&self.client, self.request.clone());
117 PagerStream::new(Box::pin(pager))
118 }
119}