pub struct RequestBuilder { /* private fields */ }
Expand description
This struct is used to build a Request
.
§Example
use lotr_api::{Request, RequestBuilder, ItemType,
sort::{Sort, SortOrder},
request::GetUrl,
attribute::{Attribute, BookAttribute}};
let request = RequestBuilder::new(ItemType::Book)
.sort(Sort::new(
SortOrder::Ascending,
Attribute::Book(BookAttribute::Name),
))
.build()
.unwrap();
assert_eq!(request.get_url(), "book?sort=name:asc");
Implementations§
Source§impl RequestBuilder
impl RequestBuilder
pub fn new(item_type: ItemType) -> Self
Sourcepub fn id(self, id: String) -> Self
pub fn id(self, id: String) -> Self
Sets the id of the request. This is used to get a specific item.
Sourcepub fn secondary_item_type(self, secondary_item_type: ItemType) -> Self
pub fn secondary_item_type(self, secondary_item_type: ItemType) -> Self
Sets the secondary item type of the request. If you wish
to get a secondary item type, you need to set the id of the request.
If not the build
function will return an error.
§Example
use lotr_api::{ItemType, Request, RequestBuilder,
request::GetUrl};
let request = RequestBuilder::new(ItemType::Character)
.id("123".to_string())
.secondary_item_type(ItemType::Quote)
.build()
.unwrap();
assert_eq!(request.get_url(), "character/123/quote");
Sourcepub fn sort(self, sort: Sort) -> Self
pub fn sort(self, sort: Sort) -> Self
Sets the sort of the request. If you wish to sort the results
of the request, the sort_by
attribute of the Sort
struct
must be of the same type as the item type of the request ( or the
secondary item type if it is set).
§Example
use lotr_api::{ItemType, Request, RequestBuilder,
attribute::{Attribute, BookAttribute},
request::GetUrl,
sort::{Sort, SortOrder}};
let request = RequestBuilder::new(ItemType::Book)
.sort(Sort::new(
SortOrder::Ascending,
Attribute::Book(BookAttribute::Name),
))
.build()
.unwrap();
assert_eq!(request.get_url(), "book?sort=name:asc");
Failing to match the item type of the request results in an error.
use lotr_api::{ItemType, Request, RequestBuilder,
attribute::{Attribute, BookAttribute},
request::GetUrl,
sort::{ Sort, SortOrder}};
let request = RequestBuilder::new(ItemType::Character)
.id("123".to_string())
.secondary_item_type(ItemType::Quote)
.sort(Sort::new(
SortOrder::Ascending,
Attribute::Book(BookAttribute::Name),
))
.build();
assert!(request.is_err());
Sourcepub fn filter(self, filter: Filter) -> Self
pub fn filter(self, filter: Filter) -> Self
Sets the filter of the request. If you wish to filter the results
of the request, the filter_by
attribute of the Filter
struct
must be of the same type as the item type of the request ( or the
secondary item type if it is set).
§Example
use lotr_api::{ItemType, Request, RequestBuilder,
attribute::{Attribute, BookAttribute},
request::GetUrl,
filter::{Filter, Operator}};
let request = RequestBuilder::new(ItemType::Book)
.filter(Filter::Match(
Attribute::Book(BookAttribute::Name),
Operator::Eq,
vec!["The Fellowship of the Ring".to_string()],
))
.build()
.unwrap();
assert_eq!(request.get_url(), "book?name=The Fellowship of the Ring");
Failing to match the item type of the request results in an error.
use lotr_api::{ItemType, Request, RequestBuilder,
attribute::{Attribute, BookAttribute},
request::GetUrl,
filter::{Filter, Operator}};
let request = RequestBuilder::new(ItemType::Character)
.id("123".to_string())
.secondary_item_type(ItemType::Quote)
.filter(Filter::Match(
Attribute::Book(BookAttribute::Name),
Operator::Eq,
vec!["The Fellowship of the Ring".to_string()],
))
.build();
assert!(request.is_err());
Sourcepub fn pagination(self, pagination: Pagination) -> Self
pub fn pagination(self, pagination: Pagination) -> Self
Sets the pagination of the request.
Sourcepub fn build(self) -> Result<Request, Error>
pub fn build(self) -> Result<Request, Error>
Builds the request. If the request is invalid, an error is returned.
§Errors
A request is invalid if:
- The secondary item type is set but the id is not.
- The sort is set but the item type of the sort does not match the item type of the request.
- The filter is set but the item type of the filter does not match the item type of the request.