rust-faker 0.1.5

create fake data with rust
Documentation
use std::io::Result as IoResult;
use std::cmp::PartialEq;

#[derive(Debug)]
pub struct Name {
  pub first_name: String,
  pub last_name: String,
}

#[derive(Debug)]
pub struct Email {
  pub email: String,
}

#[derive(Debug)]
pub struct Text {
  pub title: String,
  pub description: String,
}

#[derive(Debug)]
pub struct Address {
  pub address: String,
}

impl PartialEq for Name {
  fn eq(&self, other: &Self) -> bool {
    (self.first_name == other.first_name) && (self.last_name == other.last_name)
  }
}

impl Name {
  pub fn fullname(self) -> String {
    format!("{} {}", self.first_name, self.last_name)
  }

  pub fn reverse(self) -> IoResult<String> {
    let mut result = String::new();

    for name in self.fullname().chars().rev() {
      result.push(name)
    }

    Ok(result)
  }
}

impl PartialEq for Email {
  fn eq(&self, other: &Self) -> bool {
    self.email == other.email
  }
}

impl PartialEq for Text {
  fn eq(&self, other: &Self) -> bool {
    (self.title == other.title) && (self.description == other.description)
  }
}

impl PartialEq for Address {
  fn eq(&self, other: &Self) -> bool {
    self.address == other.address
  }
}

pub mod name;
pub mod email;
pub mod text;
pub mod address;

pub fn create_names(first_name: &'static str, last_name: &'static str, loop_by: i32) -> IoResult<Vec<Name>> {
  Ok(name::create_names(first_name, last_name, loop_by).unwrap())
}

pub fn create_name(first_name: &'static str, last_name: &'static str) -> IoResult<Name> {
  Ok(name::create_name(first_name, last_name).unwrap())
}

pub fn create_emails(email: &'static str, loop_by: i32) -> IoResult<Vec<Email>> {
  Ok(email::create_emails(email, loop_by).unwrap())
} 

pub fn create_email(email: &'static str) -> IoResult<Email> {
  Ok(email::create_email(email).unwrap())
}

pub fn create_text(title: &'static str, description: &'static str, loop_by: i32) -> IoResult<Vec<Text>> {
  Ok(text::create_text(title, description, loop_by).unwrap())
}

pub fn create_address(address: &'static str, loop_by: i32) -> IoResult<Vec<Address>> {
  Ok(address::create_address(address, loop_by).unwrap())
}

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

  #[test]
  fn test_create_names() {
    let first_name: &'static str = "Adiatma";
    let last_name: &'static str = "Kamarudin";
    let actual = create_names(first_name, last_name, 2).unwrap();
    let expected = [
      Name{
        first_name: first_name.to_string(),
        last_name: last_name.to_string(),
      },
      Name{
        first_name: first_name.to_string(),
        last_name: last_name.to_string(),
      },
    ];

    assert_eq!(actual, expected)
  }

  #[test]
  fn test_create_name() {
    let first_name: &'static str = "Adiatma";
    let last_name: &'static str = "Kamarudin";
    let actual = create_name(first_name, last_name).unwrap();
    let expected = Name{
      first_name: first_name.to_string(),
      last_name: last_name.to_string()
    };

    assert_eq!(actual, expected)
  }

  #[test]
  fn test_fullname() {
    let first_name: &'static str = "Adiatma";
    let last_name: &'static str = "Kamarudin";
    let actual = create_name(first_name, last_name).unwrap().fullname();
    let expected = "Adiatma Kamarudin";

    assert_eq!(actual, expected)
  }

  #[test]
  fn test_reverse_name() {
    let first_name: &'static str = "A";
    let last_name: &'static str = "b";
    let actual = create_name(first_name, last_name).unwrap().reverse().unwrap();
    let expected = "b A";

    assert_eq!(actual, expected)
  }

  #[test]
  fn test_create_emails() {
    let email: &'static str = "adiatma@gmail.com";
    let actual = create_emails(email, 2).unwrap();
    let expected = [
      Email{
        email: email.to_string(),
      },
      Email{
        email: email.to_string(),
      },
    ];

    assert_eq!(actual, expected)
  }

  #[test]
  fn test_create_email() {
    let email: &'static str = "adiatma@gmail.com";
    let actual = create_email(email).unwrap();
    let expected = Email{ email: email.to_string() };

    assert_eq!(actual, expected)
  }

  #[test]
  fn text_create_text() {
    let title: &'static str = "Hello";
    let description: &'static str = "World";
    let actual = create_text(title, description, 2).unwrap();
    let expected = [
      Text{
        title: title.to_string(),
        description: description.to_string()
      },
      Text{
        title: title.to_string(),
        description: description.to_string()
      },
    ];

    assert_eq!(actual, expected)
  }

  #[test]
  fn test_create_address() {
    let address: &'static str = "Street Foo";
    let actual = create_address(address, 2).unwrap();
    let expected = [Address{ address: address.to_string() }, Address{ address: address.to_string() }];

    assert_eq!(actual, expected)
  }
}