event_queue/
lib.rs

1//! Tamamen öğrenme amacıyla açılmış önemsiz bir rust modülüdür.
2//! Sembolik olarak Event isimli bir veri yapısı ile çalışan Queue modelinde bir koleksiyon ve ilgili fonksiyonlarını barındırır.
3//!
4//! # Example
5//!
6//! ```
7//! use std::time::SystemTime;
8//! use event_queue::Event;
9//!
10//! let t = SystemTime::now();
11//! let e = Event::new("Product_Added".to_string(), t);
12//! ```
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17
18    #[test]
19    fn should_create_an_event_works_test() {
20        let t = SystemTime::now();
21        let e = Event::new("Product_Added".to_string(), t);
22        assert_eq!(e.to_str(), format!("Product_Added [{:?}]", t));
23    }
24
25    #[test]
26    fn should_create_an_eventqueue_works_test() {
27        let mut event_queue = EventQueue::new();
28        assert_eq!(event_queue.count(), 0);
29
30        let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
31        event_queue.enqueue(event_1);
32        let event_2 = Event::new("Basket_Refreshed".to_string(), SystemTime::now());
33        event_queue.enqueue(event_2);
34        let event_3 = Event::new("Product_Added".to_string(), SystemTime::now());
35        event_queue.enqueue(event_3);
36        assert_eq!(event_queue.count(), 3);
37    }
38
39    #[test]
40    fn should_dequeue_fn_works_test() {
41        let mut event_queue = EventQueue::new();
42        let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
43        event_queue.enqueue(event_1);
44        let event_2 = Event::new("Basket_Refreshed".to_string(), SystemTime::now());
45        event_queue.enqueue(event_2);
46        let some_event = event_queue.dequeue();
47        assert_eq!(some_event.name, "Product_Created");
48        assert_eq!(event_queue.count(), 1);
49        let other_event = event_queue.dequeue();
50        assert_eq!(other_event.name, "Basket_Refreshed");
51        assert_eq!(event_queue.count(), 0);
52    }
53
54    #[test]
55    fn should_peek_fn_works_test() {
56        let mut event_queue = EventQueue::new();
57        let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
58        event_queue.enqueue(event_1);
59        let event_2 = Event::new("Basket_Refreshed".to_string(), SystemTime::now());
60        event_queue.enqueue(event_2);
61        let e = event_queue.peek();
62        assert_eq!(e.unwrap().name, "Product_Created");
63        event_queue.dequeue();
64        event_queue.dequeue();
65        assert_eq!(event_queue.peek(), None);
66    }
67
68    #[test]
69    #[should_panic]
70    fn should_dequeue_fn_panic_test() {
71        let mut event_queue = EventQueue::new();
72        let event_1 = Event::new("Product_Created".to_string(), SystemTime::now());
73        event_queue.enqueue(event_1);
74        event_queue.dequeue();
75        event_queue.dequeue();
76    }
77}
78
79use std::time::SystemTime;
80
81/// Bir olayı sembolize eden veri yapısıdır.
82///
83/// # Arguments
84///
85/// * `name` - Olayın adı.
86/// * `time` - Olayın zamanı.
87#[derive(Debug, PartialEq)]
88pub struct Event {
89    pub name: String,
90    pub time: SystemTime,
91}
92
93/// Event veri türü ile ilgili fonksiyonlar.
94impl Event {
95    /// Yeni bir event değişkeni oluşturur.
96    pub fn new(n: String, t: SystemTime) -> Self {
97        Event { name: n, time: t }
98    }
99
100    // Event içeriğini String formatta dönen fonksiyondur
101    pub fn to_str(&self) -> String {
102        format!("{} [{:?}]", self.name, self.time)
103    }
104}
105
106///
107/// Bir olaylar dizisi kuyruğunu temsil eden veri yapısıdır.
108/// Queue mantığında çalışır.
109/// FIFI - First In First Out
110pub struct EventQueue {
111    pub events: Vec<Event>,
112}
113
114impl EventQueue {
115    /// Yeni bir EventQueue nesnesi oluşturmak için kullanılır
116    pub fn new() -> Self {
117        EventQueue { events: Vec::new() }
118    }
119
120    /// Kuyruğa Event eklemek için
121    pub fn enqueue(&mut self, e: Event) {
122        self.events.push(e)
123    }
124
125    /// İlk eklenen elemanı kuyruktan çıkarır ve geriye döndürür
126    pub fn dequeue(&mut self) -> Event {
127        self.events.remove(0)
128    }
129
130    /// Kuyruktaki eleman sayısını elde etmek için
131    pub fn count(&self) -> usize {
132        self.events.len()
133    }
134
135    /// İlk eklenen elemanı verir ama kuyruktan çıkarmaz
136    pub fn peek(&self) -> Option<&Event> {
137        let e = self.events.first();
138        match e {
139            Some(_) => e,
140            _ => None,
141        }
142    }
143}