mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-11 20:02:09 +00:00
Add rust version
This commit is contained in:
parent
3cb8ec5871
commit
52d3d5607a
1
rust/.gitignore
vendored
Normal file
1
rust/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
target/
|
||||
4
rust/Cargo.lock
generated
Normal file
4
rust/Cargo.lock
generated
Normal file
@ -0,0 +1,4 @@
|
||||
[root]
|
||||
name = "rust"
|
||||
version = "0.1.0"
|
||||
|
||||
4
rust/Cargo.toml
Normal file
4
rust/Cargo.toml
Normal file
@ -0,0 +1,4 @@
|
||||
[package]
|
||||
name = "rust"
|
||||
version = "0.1.0"
|
||||
authors = ["Michael Gerhaeuser <michael.gerhaeuser@gmail.com>"]
|
||||
80
rust/src/gildedrose/mod.rs
Normal file
80
rust/src/gildedrose/mod.rs
Normal file
@ -0,0 +1,80 @@
|
||||
use std::string;
|
||||
use std::vec;
|
||||
|
||||
pub struct Item {
|
||||
pub name: string::String,
|
||||
pub sell_in: i32,
|
||||
pub quality: i32
|
||||
}
|
||||
|
||||
impl Item {
|
||||
pub fn new(name: String, sell_in: i32, quality: i32) -> Item {
|
||||
Item {name: name, sell_in: sell_in, quality: quality}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct GildedRose {
|
||||
pub items: vec::Vec<Item>
|
||||
}
|
||||
|
||||
impl GildedRose {
|
||||
pub fn new(items: vec::Vec<Item>) -> GildedRose {
|
||||
GildedRose {items: items}
|
||||
}
|
||||
|
||||
pub fn update_quality(&mut self) {
|
||||
for item in &mut self.items {
|
||||
if item.name != "Aged Brie" && item.name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if item.quality > 0 {
|
||||
if item.name != "Sulfuras, Hand of Ragnaros" {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if item.quality < 50
|
||||
{
|
||||
item.quality = item.quality + 1;
|
||||
|
||||
if item.name == "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if item.sell_in < 11 {
|
||||
if item.quality < 50 {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if item.sell_in < 6 {
|
||||
if item.quality < 50 {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if item.name != "Sulfuras, Hand of Ragnaros" {
|
||||
item.sell_in = item.sell_in - 1;
|
||||
}
|
||||
|
||||
if item.sell_in < 0 {
|
||||
if item.name != "Aged Brie" {
|
||||
if item.name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if item.quality > 0 {
|
||||
if item.name != "Sulfuras, Hand of Ragnaros" {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
item.quality = item.quality - item.quality;
|
||||
}
|
||||
} else {
|
||||
if item.quality < 50 {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test;
|
||||
10
rust/src/gildedrose/test.rs
Normal file
10
rust/src/gildedrose/test.rs
Normal file
@ -0,0 +1,10 @@
|
||||
use super::{Item, GildedRose};
|
||||
|
||||
#[test]
|
||||
pub fn foo() {
|
||||
let items = vec![Item::new(String::from("foo"), 0, 0)];
|
||||
let mut rose = GildedRose::new(items);
|
||||
rose.update_quality();
|
||||
|
||||
assert_eq!("fixme", rose.items[0].name);
|
||||
}
|
||||
31
rust/src/main.rs
Normal file
31
rust/src/main.rs
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
mod gildedrose;
|
||||
|
||||
use gildedrose::{Item, GildedRose};
|
||||
|
||||
fn main() {
|
||||
let items = vec![
|
||||
Item::new(String::from("+5 Dexterity Vest"), 10, 20),
|
||||
Item::new(String::from("Aged Brie"), 2, 0),
|
||||
Item::new(String::from("Elixir of the Mongoose"), 5, 7),
|
||||
Item::new(String::from("Sulfuras, Hand of Ragnaros"), 0, 80),
|
||||
Item::new(String::from("Sulfuras, Hand of Ragnaros"), -1, 80),
|
||||
Item::new(String::from("Backstage passes to a TAFKAL80ETC concert"), 15, 20),
|
||||
Item::new(String::from("Backstage passes to a TAFKAL80ETC concert"), 10, 49),
|
||||
Item::new(String::from("Backstage passes to a TAFKAL80ETC concert"), 5, 49),
|
||||
// this conjured item does not work properly yet
|
||||
Item::new(String::from("Conjured Mana Cake"), 3, 6)
|
||||
];
|
||||
let mut rose = GildedRose::new(items);
|
||||
|
||||
println!("OMGHAI!");
|
||||
for i in (0..30) {
|
||||
println!("-------- day {} --------", i);
|
||||
println!("name, sellIn, quality");
|
||||
for item in &rose.items {
|
||||
println!("{}, {}, {}", item.name, item.sell_in, item.quality);
|
||||
}
|
||||
println!("");
|
||||
rose.update_quality();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user