desmos_bindings/relationships/
querier.rs1#[cfg(feature = "iterators")]
4use crate::{
5 iter::page_iterator::{Page, PageIterator},
6 relationships::types::{Relationship, UserBlock},
7};
8#[cfg(feature = "iterators")]
9use cosmwasm_std::Binary;
10
11use crate::cosmos_types::PageRequest;
12use crate::relationships::types::*;
13use cosmwasm_std::{Addr, Empty, QuerierWrapper, StdResult};
14
15pub struct RelationshipsQuerier<'a> {
17 querier: crate::relationships::types::RelationshipsQuerier<'a, Empty>,
18}
19
20impl<'a> RelationshipsQuerier<'a> {
21 pub fn new(querier: &'a QuerierWrapper<'a, Empty>) -> Self {
33 Self {
34 querier: crate::relationships::types::RelationshipsQuerier::new(querier),
35 }
36 }
37
38 pub fn query_relationships(
46 &self,
47 subspace_id: u64,
48 user: Option<Addr>,
49 counterparty: Option<Addr>,
50 pagination: Option<PageRequest>,
51 ) -> StdResult<QueryRelationshipsResponse> {
52 self.querier.relationships(
53 subspace_id,
54 user.unwrap_or_else(|| Addr::unchecked("")).into(),
55 counterparty.unwrap_or_else(|| Addr::unchecked("")).into(),
56 pagination.map(Into::into),
57 )
58 }
59
60 #[cfg(feature = "iterators")]
67 pub fn iterate_relationships(
68 &self,
69 subspace_id: u64,
70 user: Option<Addr>,
71 page_size: u64,
72 ) -> PageIterator<Relationship, Binary> {
73 PageIterator::new(
74 Box::new(move |key, limit| {
75 self.query_relationships(
76 subspace_id,
77 user.clone(),
78 None,
79 Some(PageRequest {
80 key: key.unwrap_or_default().to_vec(),
81 limit: limit.into(),
82 reverse: false,
83 count_total: false,
84 offset: 0,
85 }),
86 )
87 .map(|response| Page {
88 items: response.relationships,
89 next_page_key: response.pagination.and_then(|response| {
90 (!response.next_key.is_empty()).then_some(Binary::from(response.next_key))
91 }),
92 })
93 }),
94 page_size,
95 )
96 }
97
98 pub fn query_blocks(
106 &self,
107 subspace_id: u64,
108 blocker: Option<Addr>,
109 blocked: Option<Addr>,
110 pagination: Option<PageRequest>,
111 ) -> StdResult<QueryBlocksResponse> {
112 self.querier.blocks(
113 subspace_id,
114 blocker.unwrap_or_else(|| Addr::unchecked("")).into(),
115 blocked.unwrap_or_else(|| Addr::unchecked("")).into(),
116 pagination.map(Into::into),
117 )
118 }
119
120 #[cfg(feature = "iterators")]
127 pub fn iterate_blocks(
128 &self,
129 subspace_id: u64,
130 blocker: Option<Addr>,
131 page_size: u64,
132 ) -> PageIterator<UserBlock, Binary> {
133 PageIterator::new(
134 Box::new(move |key, limit| {
135 self.query_blocks(
136 subspace_id,
137 blocker.clone(),
138 None,
139 Some(PageRequest {
140 key: key.unwrap_or_default().to_vec(),
141 limit: limit.into(),
142 reverse: false,
143 count_total: false,
144 offset: 0,
145 }),
146 )
147 .map(|response| Page {
148 items: response.blocks,
149 next_page_key: response.pagination.and_then(|response| {
150 (!response.next_key.is_empty()).then_some(Binary::from(response.next_key))
151 }),
152 })
153 }),
154 page_size,
155 )
156 }
157}
158
159#[cfg(test)]
160mod tests {
161 use super::*;
162 use crate::mocks::mock_queriers::mock_desmos_dependencies;
163 use crate::relationships::mocks::{MockRelationshipsQueries, MOCK_TARGET, MOCK_USER};
164 use cosmwasm_std::Addr;
165
166 #[test]
167 fn test_query_relationships() {
168 let owned_deps = mock_desmos_dependencies();
169 let deps = owned_deps.as_ref();
170 let querier = RelationshipsQuerier::new(&deps.querier);
171 let response = querier
172 .query_relationships(
173 0,
174 Some(Addr::unchecked(MOCK_USER)),
175 Some(Addr::unchecked(MOCK_TARGET)),
176 None,
177 )
178 .unwrap();
179 let expected = MockRelationshipsQueries::get_mocked_relationships_response();
180 assert_eq!(expected, response)
181 }
182
183 #[test]
184 fn test_iterate_relationships() {
185 let owned_deps = mock_desmos_dependencies();
186 let deps = owned_deps.as_ref();
187 let querier = RelationshipsQuerier::new(&deps.querier);
188 let mut it = querier.iterate_relationships(0, Some(Addr::unchecked("")), 10);
189 let expected = MockRelationshipsQueries::get_mocked_relationships_response();
190 assert_eq!(expected.relationships[0], it.next().unwrap().unwrap(),);
191 assert!(it.next().is_none());
192 }
193
194 #[test]
195 fn test_query_blocks() {
196 let owned_deps = mock_desmos_dependencies();
197 let deps = owned_deps.as_ref();
198 let querier = RelationshipsQuerier::new(&deps.querier);
199 let response = querier
200 .query_blocks(
201 0,
202 Some(Addr::unchecked(MOCK_USER)),
203 Some(Addr::unchecked(MOCK_TARGET)),
204 None,
205 )
206 .unwrap();
207 let expected = MockRelationshipsQueries::get_mocked_blocks_response();
208 assert_eq!(expected, response)
209 }
210
211 #[test]
212 fn test_iterate_blocks() {
213 let owned_deps = mock_desmos_dependencies();
214 let deps = owned_deps.as_ref();
215 let querier = RelationshipsQuerier::new(&deps.querier);
216 let mut it = querier.iterate_blocks(0, Some(Addr::unchecked("")), 10);
217 let expected = MockRelationshipsQueries::get_mocked_blocks_response();
218 assert_eq!(expected.blocks[0], it.next().unwrap().unwrap(),);
219 assert!(it.next().is_none());
220 }
221}