# Jplaceholder [![Build Status](https://travis-ci.com/WebD-EG/Jplaceholder-Rust.svg?token=2xwgxyVwYTZY33ZwbM8M&branch=master)](https://travis-ci.com/WebD-EG/Jplaceholder-Rust) A Rust library for the JSON Placeholder API Documentation: [https://docs.rs/jplaceholder/1.0.1/jplaceholder/](https://docs.rs/jplaceholder/) # Table of Contents - [JPlaceholder](#jplaceholder) - [Example](#example) - [Installation](#installation) - [Usage](#usage) - [The model trait](#the-model-trait) - [Relationships](#relationships) - [Contribution guide](#contribution-guide) ## Example: ```rust extern crate jplaceholder; use jplaceholder::Model; use jplaceholder::Post; match Post::find(2) { Some(post) => println!("Title of the article {}: {}", post.id, post.title), None => println!("Article not found!") } ``` ## Installation To install the library, you just have to put it into your **Cargo.toml** file: ```toml jplaceholder = "1.0.1" ``` Then, require the library into your main file. ```rust extern crate jplaceholder; ``` ## Usage ### The model trait The model trait provides usefull methods to interact with the resources. #### Implementations - Post - User ### fn find(id: i32) -> Option; Finds a resource by its ID **Example:** ```rust use jplaceholder::Model; use jplaceholder::Post; match Post::find(2) { Some(post) => println!("Title of the article {}: {}", post.id, post.title), None => println!("Article not found!") } ``` ### fn all(id: i32) -> Option; Gets all of the resources **Example:** ```rust use jplaceholder::Model; use jplaceholder::Post; let posts: Vec = Post::all(); for post in posts { println!("The title of the post {} is: {}", post.id, post.title) } ``` ### fn create() -> Vec; Creates a new resource **Example:** ```rust use jplaceholder::Model; use jplaceholder::Post; let post = Post{id: 5, title: String::from("Hey"), body: String::from("hehe"), user_id: 5}; Post::create(post); ``` ### Relationships Relationships let you interact between models. Let's say that I get the first user like this: ```rust use jplaceholder::Model; use jplaceholder::User; use jplaceholder::Post; let user = match User::find(1) { Some(u) => u, None => panic!("user not found") }; ``` Now, if I want to get all of the articles posted by this user: ```rust // ....... let posts: Vec = user.posts().expect("This user has posted no article"); println!("{} posted {} articles", user.name, posts.len()); ``` And conversely, if I want to get the user that posted an article: ```rust use jplaceholder::Model; use jplaceholder::Post; if let Some(post) = Post::find(1) { match post.user() { Some(user) => println!("{} has posted this article", user.name), None => println!("Author not found") } } ``` # Contribution guide 1. Fork and Clone the repository 2. Create your own branch 3. Start Coding! 4. Make a pull request when you're done :)