Struct egg_mode::cursor::CursorIter [] [src]

#[must_use = "cursor iterators are lazy and do nothing unless consumed"]
pub struct CursorIter<'a, T> where
    T: Cursor + FromJson, 
{ pub page_size: Option<i32>, pub previous_cursor: i64, pub next_cursor: i64, // some fields omitted }

Represents a paginated list of results, such as the users who follow a specific user or the lists owned by that user.

This struct is returned by various functions and is meant to be used as an iterator. This means that all the standard iterator adaptors can be used to work with the results:

for name in egg_mode::user::followers_of("rustlang", &token)
                                        .map(|u| u.unwrap().response.screen_name).take(10) {
    println!("{}", name);
}

You can even collect the results, letting you get one set of rate-limit information for the entire search setup:

use egg_mode::Response;
use egg_mode::user::TwitterUser;
use egg_mode::error::Error;

let names: Result<Response<Vec<TwitterUser>>, Error> =
    egg_mode::user::followers_of("rustlang", &token).take(10).collect();

CursorIter has a couple adaptors of its own that you can use before consuming it. with_page_size will let you set how many users are pulled in with a single network call, and start_at_page lets you start your search at a specific page. Calling either of these after starting iteration will clear any current results.

(A note about with_page_size/page_size: While the CursorIter struct always has this method and field available, not every cursored call supports changing page size. Check the individual method documentation for notes on what page sizes are allowed.)

The type returned by the iterator is Result<Response<T::Item>, Error>, so network errors, rate-limit errors and other issues are passed directly through to next(). This also means that getting an error while iterating doesn't mean you're at the end of the list; you can wait for the network connection to return or for the rate limit to refresh before trying again.

Manual paging

The iterator works by lazily loading a page of results at a time (with size set by with_page_size or by directly assigning page_size for applicable calls) in the background whenever you ask for the next result. This can be nice, but it also means that you can lose track of when your loop will block for the next page of results. This is where the extra fields and methods on UserSearch come in. By using call(), you can get the cursor struct directly from Twitter. With that you can iterate over the results and page forward and backward as needed:

let mut list = egg_mode::user::followers_of("rustlang", &token).with_page_size(20);
let resp = list.call().unwrap();

for user in resp.response.users {
    println!("{} (@{})", user.name, user.screen_name);
}

list.next_cursor = resp.response.next_cursor;
let resp = list.call().unwrap();

for user in resp.response.users {
    println!("{} (@{})", user.name, user.screen_name);
}

Fields

The number of results returned in one network call.

Certain calls set their own minimums and maximums for what this value can be. Furthermore, some calls don't allow you to set the size of the pages at all. Refer to the individual methods' documentation for specifics.

Numeric reference to the previous page of results.

This value is intended to be automatically set and used as part of this struct's Iterator implementation. It is made available for those who wish to manually manage network calls and pagination.

Numeric reference to the next page of results. A value of zero indicates that the current page of results is the last page of the cursor.

This value is intended to be automatically set and used as part of this struct's Iterator implementation. It is made available for those who wish to manually manage network calls and pagination.

Methods

impl<'a, T> CursorIter<'a, T> where
    T: Cursor + FromJson, 
[src]

Sets the number of results returned in a single network call.

Certain calls set their own minimums and maximums for what this value can be. Furthermore, some calls don't allow you to set the size of the pages at all. Refer to the individual methods' documentation for specifics. If this method is called for a response that does not accept changing the page size, no change to the underlying struct will occur.

Calling this function will invalidate any current results, if any were previously loaded.

Loads the next page of results.

This is intended to be used as part of this struct's Iterator implementation. It is provided as a convenience for those who wish to manage network calls and pagination manually.

Trait Implementations

impl<'a, T> Iterator for CursorIter<'a, T> where
    T: Cursor + FromJson, 
[src]

The type of the elements being iterated over.

Advances the iterator and returns the next value. Read more

Returns the bounds on the remaining length of the iterator. Read more

Consumes the iterator, counting the number of iterations and returning it. Read more

Consumes the iterator, returning the last element. Read more

Returns the nth element of the iterator. Read more

🔬 This is a nightly-only experimental API. (iterator_step_by)

unstable replacement of Range::step_by

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

Takes two iterators and creates a new iterator over both in sequence. Read more

'Zips up' two iterators into a single iterator of pairs. Read more

Takes a closure and creates an iterator which calls that closure on each element. Read more

🔬 This is a nightly-only experimental API. (iterator_for_each)

Calls a closure on each element of an iterator. Read more

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

Creates an iterator that both filters and maps. Read more

Creates an iterator which gives the current iteration count as well as the next value. Read more

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

Creates an iterator that [skip]s elements based on a predicate. Read more

Creates an iterator that yields elements based on a predicate. Read more

Creates an iterator that skips the first n elements. Read more

Creates an iterator that yields its first n elements. Read more

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

Creates an iterator that works like map, but flattens nested structure. Read more

Creates an iterator which ends after the first [None]. Read more

Do something with each element of an iterator, passing the value on. Read more

Borrows an iterator, rather than consuming it. Read more

Transforms an iterator into a collection. Read more

Consumes an iterator, creating two collections from it. Read more

An iterator adaptor that applies a function, producing a single, final value. Read more

Tests if every element of the iterator matches a predicate. Read more

Tests if any element of the iterator matches a predicate. Read more

Searches for an element of an iterator that satisfies a predicate. Read more

Searches for an element in an iterator, returning its index. Read more

Searches for an element in an iterator from the right, returning its index. Read more

Returns the maximum element of an iterator. Read more

Returns the minimum element of an iterator. Read more

Returns the element that gives the maximum value from the specified function. Read more

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

Returns the element that gives the minimum value from the specified function. Read more

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

Reverses an iterator's direction. Read more

Converts an iterator of pairs into a pair of containers. Read more

Creates an iterator which [clone]s all of its elements. Read more

Repeats an iterator endlessly. Read more

Sums the elements of an iterator. Read more

Iterates over the entire iterator, multiplying all the elements Read more

Lexicographically compares the elements of this Iterator with those of another. Read more

Lexicographically compares the elements of this Iterator with those of another. Read more

Determines if the elements of this Iterator are equal to those of another. Read more

Determines if the elements of this Iterator are unequal to those of another. Read more

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more