Skip to content

Commit 120cd53

Browse files
committed
Added markdown based document
1 parent 793c07e commit 120cd53

File tree

6 files changed

+263
-15
lines changed

6 files changed

+263
-15
lines changed

drone-lab/src/controller/drone_repository.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,47 @@
11
use crate::model::Drone;
22

3+
/// # Drone Repository
4+
///
5+
/// Drone nesneleri için CRUD işlemlerini gerçekleştiren yapı.
36
pub struct DroneRepository;
47

58
#[allow(dead_code)]
69
impl DroneRepository {
10+
/// # Drone Kaydetme Metodu
11+
///
12+
/// Drone nesnesini kaydeder.
13+
///
14+
/// ## Arguments
15+
/// * `drone: Drone` - Kaydedilecek drone nesnesi
16+
///
17+
/// ## Returns
18+
/// * `Result<bool, SaveValidationError>` - İşlem sonucu
19+
///
20+
/// ## Errors
21+
/// * `SaveValidationError::InvalidDroneId` - Geçersiz drone ID hatası
22+
/// * `SaveValidationError::WrongModelName` - Yanlış model adı hatası
23+
///
24+
/// ## Examples
25+
/// ```rust
26+
/// use crate::controller::DroneRepository;
27+
/// use crate::model::Drone;
28+
///
29+
/// let drone = Drone {
30+
/// id: 1,
31+
/// is_alive: true,
32+
/// energy_level: 50.0,
33+
/// model: "DJI Mavic".to_string(),
34+
/// location: Location {
35+
/// x: 100.0,
36+
/// y: 200.0,
37+
/// z: 300.0,
38+
/// caption: "Test Location".to_string(),
39+
/// },
40+
/// };
41+
///
42+
/// let result = DroneRepository::save(drone);
43+
/// assert!(result.is_ok());
44+
/// ```
745
pub fn save(drone: Drone) -> Result<bool, SaveValidationError> {
846
if drone.id == 0 {
947
return Err(SaveValidationError::InvalidDroneId);
@@ -15,6 +53,14 @@ impl DroneRepository {
1553
}
1654
}
1755

56+
/// # Kaydetme Hata Enum'u
57+
///
58+
/// Drone kaydetme işlemi sırasında oluşabilecek hataları temsil eder.
59+
///
60+
/// ## Enum Variants
61+
///
62+
/// * `InvalidDroneId` - Geçersiz drone ID hatası
63+
/// * `WrongModelName` - Yanlış model adı hatası
1864
#[derive(Debug, PartialEq)]
1965
#[allow(dead_code)]
2066
pub enum SaveValidationError {

drone-lab/src/controller/flight_controller.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,42 @@
11
use crate::model::{Drone, Location};
2+
/// # Drone Uçuş Kontrol Nesnesi
3+
///
4+
/// Sahada bulunan drone'lara ait uçuş kontrollerini sağlar.
25
pub struct FlightController;
36

47
#[allow(dead_code)]
58
impl FlightController {
9+
/// # Durum Kontrol Metodu
10+
///
11+
/// Drone nesnesinin durumunu kontrol eder.
12+
///
13+
/// ## Arguments
14+
/// * `drone: &Drone` - Kontrol edilecek drone nesnesi
15+
///
16+
/// ## Returns
17+
/// * `DroneStatus` - Drone'un durumunu temsil eden enum
18+
///
19+
/// ## Examples
20+
/// ```rust
21+
/// use crate::controller::FlightController;
22+
/// use crate::model::{Drone, Location};
23+
///
24+
/// let drone = Drone {
25+
/// id: 1,
26+
/// is_alive: true,
27+
/// energy_level: 50.0,
28+
/// model: "DJI Mavic".to_string(),
29+
/// location: Location {
30+
/// x: 100.0,
31+
/// y: 200.0,
32+
/// z: 300.0,
33+
/// caption: "Test Location".to_string(),
34+
/// },
35+
/// };
36+
///
37+
/// let status = FlightController::check_status(&drone);
38+
/// assert_eq!(status, DroneStatus::LowBattery(BatteryRate(50.0)));
39+
/// ```
640
pub fn check_status<'a>(drone: &'a Drone<'a>) -> DroneStatus<'a> {
741
// Harici bir REST Api'den bilgileri çektiğimizi düşünelim.
842
// Örneğin http://localhost:4980/drone/api/states/{id} HTTP Get
@@ -19,6 +53,17 @@ impl FlightController {
1953
DroneStatus::Fine
2054
}
2155
}
56+
57+
/// # Drone Durum Enum'u
58+
///
59+
/// Drone'un durumunu temsil eden enum'dur.
60+
///
61+
/// ## Enum Variants
62+
///
63+
/// * `OutOffRange(Location)` - Drone'un uçuş alanının dışına çıktığını belirtir.
64+
/// * `Offline` - Drone'un çevrimdışı olduğunu belirtir.
65+
/// * `LowBattery(BatteryRate)` - Drone'un pil seviyesinin düşük olduğunu belirtir.
66+
/// * `Fine` - Drone'un durumunun iyi olduğunu belirtir.
2267
#[derive(Debug, PartialEq)]
2368
#[allow(dead_code)]
2469
pub enum DroneStatus<'a> {
@@ -28,5 +73,17 @@ pub enum DroneStatus<'a> {
2873
Fine,
2974
}
3075

76+
/// # Pil Seviyesi Yapısı
77+
///
78+
/// Pil seviyesini temsil eden yapıdır.
79+
///
80+
/// ## Fields
81+
///
82+
/// * `0` - Pil seviyesini temsil eden f32 değeridir.
83+
///
84+
/// ## Links
85+
///
86+
/// Bu konuda [Primitive Obsession](https://refactoring.guru/smells/primitive-obsession) makalesinden
87+
/// daha detaylı bilgi alınabilir.
3188
#[derive(Debug, PartialEq)]
3289
pub struct BatteryRate(pub f32);

drone-lab/src/controller/mod.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1-
mod drone_repository;
2-
mod flight_controller;
3-
mod simulation_controller;
1+
//! Bu modül, drone simülasyonunu ve kontrolünü sağlayan yapıları içerir.
2+
//!
3+
//! ## Modüller
4+
//!
5+
//! * `drone_repository` - Veritabanı CRUD operasyonlarını içerir.
6+
//! * `flight_controller` - Drone'ların uçuş kontrollerini sağlar.
7+
//! * `simulation_controller` - Drone sahası ile ilgili simülasyonları yönetir.
8+
//!
9+
pub mod drone_repository;
10+
pub mod flight_controller;
11+
pub mod simulation_controller;
412

513
#[allow(unused_imports)]
614
pub use drone_repository::*;

drone-lab/src/controller/simulation_controller.rs

Lines changed: 134 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,60 @@
1-
//! # Simulation Module
2-
//! Dron simulasyon nesnelerini oluşturan, yöneten modül enstrümanlarını içerir
3-
//!
4-
//! ## Structs
5-
//! * `SimulationController`
6-
71
use crate::data::*;
82
use crate::model::*;
93
use rand::Rng;
104
use std::fs::File;
115
use std::io::Write;
126

7+
/// # SimulationController Yapısı
8+
///
9+
/// SimulationController, drone'ları yöneten ve simülasyon işlemlerini gerçekleştiren bir yapıdır.
10+
///
11+
/// ## Fields
12+
///
13+
/// * `drones: Vec<Drone>` - Simülasyonda bulunan drone'ların listesini tutar.
14+
///
15+
/// ## Methods
16+
///
17+
/// * `new()` - Yeni bir SimulationController nesnesi oluşturur.
18+
/// * `load(drone_count: i32)` - Sahaya belirtilen sayıda drone yükler.
19+
/// * `get_count()` - Sahada bulunan drone sayısını döndürür.
20+
/// * `get_random()` - Sahada bulunan drone'lar arasından rastgele bir drone döndürür.
21+
/// * `save(path: &str)` - Sahadaki drone'ları belirtilen dosyaya kaydeder.
22+
/// * `load_from(path: &str)` - Belirtilen dosyadan sahaya drone'lar yükler.
23+
///
24+
/// ## Examples
25+
/// ```rust
26+
/// use crate::controller::SimulationController;
27+
/// let mut simulator = SimulationController::new();
28+
/// let load_result = simulator.load(10);
29+
/// let drone_count = simulator.get_count();
30+
/// assert_eq!(drone_count, 10);
31+
/// let random_drone = simulator.get_random();
32+
/// assert!(random_drone.id < 10);
33+
/// let save_result = simulator.save("drones.txt");
34+
/// assert!(save_result.is_ok());
35+
/// let load_result = simulator.load_from("drones.txt");
36+
/// assert!(load_result.is_ok());
37+
/// ```
1338
#[allow(dead_code)]
1439
pub struct SimulationController<'a> {
1540
drones: Vec<Drone<'a>>,
1641
}
1742

1843
#[allow(dead_code)]
1944
impl SimulationController<'_> {
45+
/// # Constructor Metot
46+
///
47+
/// Yeni bir SimulationController nesnesi oluşturur.
48+
///
49+
/// ## Returns
50+
/// * `SimulationController:` Yeni oluşturulan SimulationController nesnesini döndürür.
51+
///
52+
/// ## Examples
53+
/// ```rust
54+
/// use crate::controller::SimulationController;
55+
///
56+
/// let simulator = SimulationController::new();
57+
/// ```
2058
pub fn new() -> Self {
2159
SimulationController { drones: Vec::new() }
2260
}
@@ -58,14 +96,72 @@ impl SimulationController<'_> {
5896
}
5997
true
6098
}
99+
100+
/// # Drone Sayısını Alma Fonksiyonu
101+
///
102+
/// Sahada bulunan drone sayısını döndürür.
103+
///
104+
/// ## Returns
105+
/// * `usize:` Sahada bulunan drone sayısını döndürür.
106+
///
107+
/// ## Examples
108+
/// ```rust
109+
/// use crate::controller::SimulationController;
110+
///
111+
/// let mut simulator = SimulationController::new();
112+
/// let load_result = simulator.load(10);
113+
/// let drone_count = simulator.get_count();
114+
/// assert_eq!(drone_count, 10);
115+
/// ```
61116
pub fn get_count(&self) -> usize {
62117
self.drones.len()
63118
}
119+
120+
/// # Rastgele Drone Alma Fonksiyonu
121+
///
122+
/// Sahada bulunan drone'lar arasından rastgele bir drone döndürür.
123+
///
124+
/// ## Returns
125+
/// * `Drone:` Rastgele seçilen drone nesnesini döndürür.
126+
///
127+
/// ## Examples
128+
/// ```rust
129+
/// use crate::controller::SimulationController;
130+
///
131+
/// let mut simulator = SimulationController::new();
132+
/// let load_result = simulator.load(10);
133+
/// let random_drone = simulator.get_random();
134+
/// assert!(random_drone.id < 10);
135+
/// ```
64136
pub fn get_random(&self) -> Drone {
65137
let mut rng = rand::rng();
66138
self.drones[rng.random_range(0..self.drones.len())]
67139
}
68140

141+
/// # Kaydetme Fonksiyonu
142+
///
143+
/// Sahadaki drone'ları belirtilen dosyaya kaydeder.
144+
///
145+
/// ## Arguments
146+
/// * `path: &str` türünden dosya yolunu ifade eder.
147+
///
148+
/// ## Returns
149+
/// * `std::io::Result<u32>` İşlemin başarılı olup olmadığı bilgisidir.
150+
///
151+
/// ## Examples
152+
/// ```rust
153+
/// use crate::controller::SimulationController;
154+
/// use std::fs::File;
155+
///
156+
/// let mut simulator = SimulationController::new();
157+
/// let load_result = simulator.load(10);
158+
/// let save_result = simulator.save("drones.txt");
159+
/// assert!(save_result.is_ok());
160+
/// ```
161+
/// ## Panics
162+
///
163+
/// * Dosya oluşturulamadığında panik yapar.
164+
/// * Dosya yazma işlemi başarısız olduğunda panik yapar.
69165
pub fn save(&self, path: &str) -> std::io::Result<u32> {
70166
let mut content = String::new();
71167
for drone in &self.drones {
@@ -78,7 +174,32 @@ impl SimulationController<'_> {
78174
Ok(content.len() as u32)
79175
}
80176

81-
pub fn load_from(path: &str) -> std::io::Result<()> {
177+
/// # Yükleme Fonksiyonu
178+
///
179+
/// Sahadaki drone'ları belirtilen dosyadan yükler.
180+
///
181+
/// ## Arguments
182+
/// * `path: &str` türünden dosya yolunu ifade eder.
183+
///
184+
/// ## Returns
185+
/// * `std::io::Result<()>` İşlemin başarılı olup olmadığı bilgisidir.
186+
///
187+
/// ## Examples
188+
/// ```rust
189+
/// use crate::controller::SimulationController;
190+
/// use std::fs::File;
191+
///
192+
/// let mut simulator = SimulationController::new();
193+
/// let load_result = simulator.load(10);
194+
/// let save_result = simulator.save("drones.txt");
195+
/// let load_result = simulator.load_from("drones.txt");
196+
/// assert!(load_result.is_ok());
197+
/// ```
198+
///
199+
/// ## Panics
200+
/// * Dosya bulunamadığında panik yapar.
201+
/// * Dosya okuma işlemi başarısız olduğunda panik yapar.
202+
pub fn load_from(_path: &str) -> std::io::Result<()> {
82203
//todo@buraksenyurt Aşağıdaki maddeler tamamlanmalı
83204

84205
// Dosya gerçekten var mı kontrolü?
@@ -88,3 +209,9 @@ impl SimulationController<'_> {
88209
Ok(())
89210
}
90211
}
212+
213+
impl Default for SimulationController<'_> {
214+
fn default() -> Self {
215+
Self::new()
216+
}
217+
}

drone-lab/src/main.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
use crate::controller::SimulationController;
22

3-
mod controller;
4-
mod data;
5-
mod model;
6-
mod tests;
3+
pub mod controller;
4+
pub mod data;
5+
pub mod model;
6+
pub mod tests;
77

8-
fn main() {
8+
/*
9+
Bu örnekte bazı enstrümanlarda markdown formatında yardımcı metinler eklenmiştir.
10+
Bunları içeren HTML yardım dokümanını hazırlayabilmek için `cargo doc` komutunu kullanabilirsiniz.
11+
Bu komut, projenizin kök dizininde `target/doc` dizinini oluşturacak ve burada projenizin dokümantasyonunu barındıracaktır.
12+
Dokümantasyonu görüntülemek için `cargo doc --open` komutunu kullanabilirsiniz.
13+
Tüm rust ekosistemi markdown formatını desteklemektedir ve yardım dokümanları oluşturmak için yaygın olarak kullanılmaktadır.
14+
*/
15+
16+
pub fn main() {
917
// todo@buraksenyurt Derste yapılacaklar
1018
// Aynı davranışları uygulayan farklı veri yapılarını kullanabilen generic bir Simulation modeli oluşturmayı deneyelim
1119

drone-lab/src/model/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//! Bu modül, drone simülasyonunu ve kontrolünü sağlayan yapıları içerir.
2+
13
mod drone;
24
mod location;
35

0 commit comments

Comments
 (0)