@@ -16,7 +16,19 @@ fn string_contains(haystack: &String, needle: &String) -> bool {
1616/// Security constants
1717const MAX_PAGE_SIZE_ABSOLUTE : u32 = 1000 ;
1818
19-
19+ /// Lists all registered users with pagination and filtering (admin-only).
20+ ///
21+ /// # Arguments
22+ ///
23+ /// * `env` - Soroban environment.
24+ /// * `caller` - Address of the caller (must be admin).
25+ /// * `page` - The page number for pagination.
26+ /// * `page_size` - The size of each page.
27+ /// * `filter` - Optional filter criteria for users.
28+ ///
29+ /// # Returns
30+ ///
31+ /// * `Vec<LightProfile>` - A vector of lightweight user profiles.
2032pub fn list_all_users (
2133 env : Env ,
2234 caller : Address ,
@@ -81,7 +93,7 @@ pub fn list_all_users(
8193 }
8294 }
8395
84- let total_filtered = filtered_profiles. len ( ) ;
96+ let total_filtered: u32 = filtered_profiles. len ( ) ;
8597 if total_filtered == 0 {
8698 return Vec :: new ( & env) ;
8799 }
@@ -120,7 +132,15 @@ pub fn list_all_users(
120132 result
121133}
122134
123- /// Checks whether the system is properly initialized
135+ /// Checks whether the system is properly initialized.
136+ ///
137+ /// # Arguments
138+ ///
139+ /// * `env` - Soroban environment.
140+ ///
141+ /// # Returns
142+ ///
143+ /// * `bool` - True if the system is initialized, otherwise false.
124144fn is_system_initialized ( env : & Env ) -> bool {
125145 if let Some ( config) = env
126146 . storage ( )
@@ -133,15 +153,32 @@ fn is_system_initialized(env: &Env) -> bool {
133153 }
134154}
135155
136- /// Gets the admin configuration with defaults
156+ /// Gets the admin configuration with defaults.
157+ ///
158+ /// # Arguments
159+ ///
160+ /// * `env` - Soroban environment.
161+ ///
162+ /// # Returns
163+ ///
164+ /// * `AdminConfig` - The admin configuration.
137165fn get_admin_config ( env : & Env ) -> AdminConfig {
138166 env. storage ( )
139167 . persistent ( )
140168 . get :: < DataKey , AdminConfig > ( & DataKey :: AdminConfig )
141169 . unwrap_or_else ( || handle_error ( env, Error :: SystemNotInitialized ) )
142170}
143171
144- /// Checks whether the caller is an admin with enhanced security
172+ /// Checks whether the caller is an admin with enhanced security.
173+ ///
174+ /// # Arguments
175+ ///
176+ /// * `env` - Soroban environment.
177+ /// * `who` - Address of the caller.
178+ ///
179+ /// # Returns
180+ ///
181+ /// * `bool` - True if the caller is an admin, otherwise false.
145182fn is_admin ( env : & Env , who : & Address ) -> bool {
146183 // First check if system is initialized
147184 if !is_system_initialized ( env) {
@@ -166,7 +203,16 @@ fn is_admin(env: &Env, who: &Address) -> bool {
166203 }
167204}
168205
169- /// Checks if a profile matches the given filter criteria
206+ /// Checks if a profile matches the given filter criteria.
207+ ///
208+ /// # Arguments
209+ ///
210+ /// * `profile` - The user profile to check.
211+ /// * `filter` - Optional filter criteria.
212+ ///
213+ /// # Returns
214+ ///
215+ /// * `bool` - True if the profile matches the filter, otherwise false.
170216fn matches_filter (
171217 profile : & LightProfile ,
172218 filter : & Option < UserFilter > ,
@@ -213,7 +259,17 @@ fn matches_filter(
213259 true
214260}
215261
216- /// Validates and sanitizes input parameters
262+ /// Validates and sanitizes input parameters.
263+ ///
264+ /// # Arguments
265+ ///
266+ /// * `page_size` - The size of the page to validate.
267+ /// * `filter` - Optional filter criteria.
268+ /// * `config` - The admin configuration to use for validation.
269+ ///
270+ /// # Returns
271+ ///
272+ /// * `Result<(), &'static str>` - Ok if validation passes, Err with a message otherwise.
217273fn validate_input (
218274 page_size : u32 ,
219275 filter : & Option < UserFilter > ,
@@ -279,7 +335,7 @@ pub fn list_all_users_cursor(
279335 }
280336
281337 // Get admin configuration
282- let config = get_admin_config ( & env) ;
338+ let config: AdminConfig = get_admin_config ( & env) ;
283339
284340 // Authorization: only admins can call
285341 if !is_admin ( & env, & caller) {
@@ -308,17 +364,17 @@ pub fn list_all_users_cursor(
308364 }
309365
310366 // Find the starting index based on cursor
311- let start_index = if let Some ( cursor) = & pagination. cursor {
367+ let start_index: u32 = if let Some ( cursor) = & pagination. cursor {
312368 find_address_index ( & users_index, cursor) . unwrap_or ( 0 )
313369 } else {
314370 0
315371 } ;
316372
317373 // Collect filtered profiles starting from the cursor position
318- let mut result_data = Vec :: new ( & env) ;
319- let mut processed_count = 0 ;
374+ let mut result_data: Vec < LightProfile > = Vec :: new ( & env) ;
375+ let mut processed_count: u32 = 0 ;
320376 let mut next_cursor: Option < Address > = None ;
321- let mut total_matching = 0u32 ;
377+ let mut total_matching: u32 = 0u32 ;
322378
323379 for i in start_index..users_index. len ( ) {
324380 if processed_count >= pagination. limit {
@@ -361,11 +417,11 @@ pub fn list_all_users_cursor(
361417 }
362418
363419 // Determine if there are more pages
364- let has_more = if next_cursor. is_some ( ) {
420+ let has_more: bool = if next_cursor. is_some ( ) {
365421 true
366422 } else {
367423 // Check if there are more items after the current batch
368- let mut found_more = false ;
424+ let mut found_more: bool = false ;
369425 for i in ( start_index + processed_count) ..users_index. len ( ) {
370426 if let Some ( addr) = users_index. get ( i) {
371427 if let Some ( profile) = env
@@ -399,7 +455,14 @@ pub fn list_all_users_cursor(
399455
400456/// Finds the index of an address in the users index vector.
401457///
402- /// Returns the index if found, None otherwise.
458+ /// # Arguments
459+ ///
460+ /// * `users_index` - A vector of user addresses.
461+ /// * `target` - The address to find.
462+ ///
463+ /// # Returns
464+ ///
465+ /// * `Option<u32>` - The index if found, None otherwise.
403466fn find_address_index ( users_index : & Vec < Address > , target : & Address ) -> Option < u32 > {
404467 for i in 0 ..users_index. len ( ) {
405468 if let Some ( addr) = users_index. get ( i) {
@@ -412,12 +475,21 @@ fn find_address_index(users_index: &Vec<Address>, target: &Address) -> Option<u3
412475}
413476
414477/// Validates pagination parameters for cursor-based pagination.
478+ ///
479+ /// # Arguments
480+ ///
481+ /// * `pagination` - Pagination parameters to validate.
482+ /// * `config` - The admin configuration to use for validation.
483+ ///
484+ /// # Returns
485+ ///
486+ /// * `Result<(), &'static str>` - Ok if validation passes, Err with a message otherwise.
415487fn validate_pagination_params (
416488 pagination : & PaginationParams ,
417489 config : & AdminConfig ,
418490) -> Result < ( ) , & ' static str > {
419491 // Validate limit
420- let max_allowed = config. max_page_size . min ( MAX_PAGE_SIZE_ABSOLUTE ) ;
492+ let max_allowed: u32 = config. max_page_size . min ( MAX_PAGE_SIZE_ABSOLUTE ) ;
421493 if pagination. limit == 0 {
422494 return Err ( "limit must be greater than 0" ) ;
423495 }
0 commit comments