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

source

pub fn new(item_type: ItemType) -> Self

source

pub fn id(self, id: String) -> Self

Sets the id of the request. This is used to get a specific item.

source

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");
source

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());
source

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());
source

pub fn pagination(self, pagination: Pagination) -> Self

Sets the pagination of the request.

source

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.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more