1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//! This module wraps the Letterboxd API which provides easy and flexible
//! access to data on the Letterboxd.com website.
//!
//! [Client](struct.Client.html)'s API follows the following rules:
//!
//! * All Letterboxd API calls are asynchronous.
//! * Each method takes an optional argument `token`, which enabled
//!   authentication for the call.
//! * Except for GET calls all methods include a path parameter.
//!
//! Further, most of [Client](struct.Client.html)'s methods take a request
//! struct, which is then serialized to url encoded parameters and return a
//! response type, which is deserialized from JSON. However, some methods omit
//! the request or/and the response struct.
//!
//! Entities are identified in the API by Letterboxd ID (or LID), an
//! alpha-numeric string value that is returned where appropriate. For films,
//! lists and reviews, the LID can also be found through the Letterboxd website
//! as the path portion of the entity’s shareable boxd.it link.
//!
//! For more information, cf. API docs at
//! http://api-docs.letterboxd.com
//!
//! # Example
//! ```
//! # extern crate futures;
//! # extern crate letterboxd;
//! # extern crate tokio_core;
//! #
//! # use futures::future::Future;
//! # use tokio_core::reactor::Core;
//! #
//! # const USERNAME: &'static str = "some key";
//! # const PASSWORD: &'static str = "some key";
//! #
//! # fn main() {
//! #   let api_key = String::from("some_key");
//! #   let api_secret = String::from("some_secret");
//! #
//! let mut core = Core::new().unwrap();
//! let client = letterboxd::Client::new(&core.handle(), api_key, api_secret);
//!
//! let get_token = client.auth(&USERNAME, &PASSWORD);
//! let mut req = letterboxd::FilmRelationshipUpdateRequest::default();
//! req.watched = Some(true);
//! let do_update = |token| {
//!     client.update_film_relationship("2a9q", &req, &token); // Fight Club
//! };
//! // execute on core, e.g. with:
//! // core.run(get_token.and_then(do_update).and_then(|response| { ... })).unwrap();
//! # }
//! ```
//!

extern crate crypto;
extern crate hex;
extern crate hyper;
extern crate hyper_tls;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
extern crate serde_url_params;
extern crate uuid;
extern crate futures;
extern crate tokio_core;

#[macro_use]
mod rest;
mod client;
mod defs;
mod error;
mod helper;

pub use self::error::Error;
pub use client::Client;
pub use defs::*;