Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Diff between basic-requrements and advanced-requirements #2

Open
wants to merge 5 commits into
base: basic-requirements
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ version = "0.1.0"
authors = ["Tsuyoshi Maeda <oasis5tsuyoshi@gmail.com>"]

[dependencies]
serde = "1.0.23"
serde_derive = "1.0.23"
serde_json = "1.0.7"
13 changes: 13 additions & 0 deletions src/helpers/math.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
pub fn add(a: i32, b: i32) -> i32 {
a + b
}

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

#[test]
fn it_add() {
assert_eq!(1 + 2, add(1, 2));
}
}
2 changes: 2 additions & 0 deletions src/helpers/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pub mod math;
pub mod output;
15 changes: 15 additions & 0 deletions src/helpers/output.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
pub fn string(input: &str) -> () {
println!("{}", input);
}

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

#[test]
fn it_output_string() {
// Expected no error.
string("abc");
assert!(true);
}
}
11 changes: 4 additions & 7 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}
#[macro_use] extern crate serde_derive;

pub mod helpers;
pub mod models;
85 changes: 30 additions & 55 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
extern crate cc2_rust_workshop;
extern crate serde_json;

use cc2_rust_workshop::models::person::{Person};
use cc2_rust_workshop::helpers::math;
use cc2_rust_workshop::helpers::output;

fn main() {
// Basic requirement parts.

let number_1 = 1;
println!("{}", number_1);

let mut number_2 = 1;
number_2 += 1;
println!("{}", number_2);

let number_3 = add(1, 2);
let number_3 = math::add(1, 2);
println!("{}", number_3);

output_string("this is input value");
output::string("this is input value");

let person = Person::new(
"Code",
Expand All @@ -18,63 +27,29 @@ fn main() {
);
println!("{:?}", person);
person.greet();
}

fn add(a: i32, b: i32) -> i32 {
a + b
}
#[test]
fn it_add() {
assert_eq!(1 + 2, add(1, 2));
}

fn output_string(input: &str) -> () {
println!("{}", input);
}
#[test]
fn it_output_string() {
// Expected no error.
output_string("abc");
assert!(true);
}
// Advanced requirements parts.

#[derive(Debug)]
struct Person {
first_name: String,
last_name: String,
age: u8
}
// Convert the Point to a JSON string.
let serialized_person = serde_json::to_string(&person).unwrap();
println!("serialized_person = {}", serialized_person);

impl Person {
fn new(first_name: &str, last_name: &str, age: u8) -> Person {
Person {
first_name: first_name.to_string(),
last_name: last_name.to_string(),
age: age
}
}
// Convert the JSON string back to a Person.
let deserialized_person: Person = serde_json::from_str(&serialized_person).unwrap();
println!("deserialized_person = {:?}", deserialized_person);

fn greet(&self) -> () {
println!(
"My name is {} {}. I'm {} years old.",
&self.first_name,
&self.last_name,
&self.age
let mut persons: Vec<Person> = vec![];
for i in 0..5 {
let person = Person::new(
&format!("FN_{}", i),
&format!("LN_{}", i),
i
);
persons.push(person);
}
println!("{}", persons.len());
for p in persons {
// If you use {:#?} instead of {:?}, the format becomes more readable.
println!("{:#?}", p);
}
}
#[test]
fn it_person() {
let person = Person::new("FN", "LN", 1);
assert_eq!("FN", person.first_name);
assert_eq!("LN", person.last_name);
assert_eq!(1, person.age);
}
#[test]
fn it_person_greet() {
let person = Person::new("FN", "LN", 1);

// Expected no error.
person.greet();
assert!(true);
}
1 change: 1 addition & 0 deletions src/models/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub mod person;
46 changes: 46 additions & 0 deletions src/models/person.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#[derive(Serialize, Deserialize, Debug)]
pub struct Person {
first_name: String,
last_name: String,
age: u8
}

impl Person {
pub fn new(first_name: &str, last_name: &str, age: u8) -> Person {
Person {
first_name: first_name.to_string(),
last_name: last_name.to_string(),
age: age
}
}

pub fn greet(&self) -> () {
println!(
"My name is {} {}. I'm {} years old.",
&self.first_name,
&self.last_name,
&self.age
);
}
}

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

#[test]
fn it_person() {
let person = Person::new("FN", "LN", 1);
assert_eq!("FN", person.first_name);
assert_eq!("LN", person.last_name);
assert_eq!(1, person.age);
}
#[test]
fn it_person_greet() {
let person = Person::new("FN", "LN", 1);

// Expected no error.
person.greet();
assert!(true);
}
}