auth0 0.3.0

Auth0 API library
Documentation
use crate::authentication::Api;
use reqwest::RequestBuilder;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct RequestParameters {
    pub client_id: String,
    pub email: String,
    pub password: String,
    pub connection: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub given_name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub family_name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub nickname: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub picture: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub user_metadata: Option<String>,
}

pub trait Signup {
    fn signup(&self, request: RequestParameters) -> RequestBuilder;
}

impl Signup for Api {
    fn signup(&self, request: RequestParameters) -> RequestBuilder {
        let endpoint = String::from("/dbconnections/signup");
        let url = self.base_url.join(&endpoint).unwrap();
        self.client.post(url).json(&request)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::authentication::*;

    #[test]
    fn signup_build_request() {
        let base_url = Url::parse("https://YOUR_DOMAIN").unwrap();
        let authentication = AuthenicationMethod::OAuth2Token(String::from("some_awesome_token"));
        let signup = Api::init(base_url, authentication);
        let parameters = signup::RequestParameters {
            client_id: String::from("some_awesome_client_id"),
            email: String::from("some_awesome_email"),
            password: String::from("some_awesome_password"),
            connection: String::from("some_awesome_connection"),
            username: Some(String::from("some_awesome_username")),
            given_name: None,
            family_name: None,
            name: None,
            nickname: None,
            picture: None,
            user_metadata: None,
        };
        let request = signup.signup(parameters).build().unwrap();
        let test_url = String::from("https://your_domain/dbconnections/signup");
        let test_body = String::from(
            "{\"client_id\":\"some_awesome_client_id\",\
            \"email\":\"some_awesome_email\",\
            \"password\":\"some_awesome_password\",\
            \"connection\":\"some_awesome_connection\",\
            \"username\":\"some_awesome_username\"}",
        );

        assert_eq!(request.method().as_str(), reqwest::Method::POST);
        assert_eq!(request.url().as_str(), test_url);
        assert_eq!(request.headers().len(), 1);
        assert_eq!(
            request.body().unwrap().as_bytes().unwrap(),
            test_body.as_bytes(),
        );
    }
}