Skip to content

Commit 95d5e13

Browse files
committed
refactor: [#236] fix clippy too_many_arguments error with TrackerPorts struct
- Create TrackerPorts struct to group port parameters (udp_tracker_ports, http_tracker_ports, http_api_port) - Reduces DockerComposeContext::new_mysql() from 8 to 6 parameters (below clippy limit of 7) - Update all constructors and call sites to use TrackerPorts - Export TrackerPorts from docker_compose module for public API - Add TrackerPorts imports in test modules only where needed
1 parent 150f382 commit 95d5e13

File tree

6 files changed

+124
-59
lines changed

6 files changed

+124
-59
lines changed

src/application/steps/rendering/docker_compose_templates.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ use tracing::{info, instrument};
3232
use crate::domain::environment::Environment;
3333
use crate::domain::template::TemplateManager;
3434
use crate::domain::tracker::{DatabaseConfig, TrackerConfig};
35-
use crate::infrastructure::templating::docker_compose::template::wrappers::docker_compose::DockerComposeContext;
35+
use crate::infrastructure::templating::docker_compose::template::wrappers::docker_compose::{
36+
DockerComposeContext, TrackerPorts,
37+
};
3638
use crate::infrastructure::templating::docker_compose::template::wrappers::env::EnvContext;
3739
use crate::infrastructure::templating::docker_compose::{
3840
DockerComposeProjectGenerator, DockerComposeProjectGeneratorError,
@@ -142,16 +144,18 @@ impl<S> RenderDockerComposeTemplatesStep<S> {
142144
let (udp_tracker_ports, http_tracker_ports, http_api_port) =
143145
Self::extract_tracker_ports(tracker_config);
144146

147+
let ports = TrackerPorts {
148+
udp_tracker_ports,
149+
http_tracker_ports,
150+
http_api_port,
151+
};
152+
145153
// Create contexts based on database configuration
146154
let database_config = &self.environment.context().user_inputs.tracker.core.database;
147155
let (env_context, docker_compose_context) = match database_config {
148156
DatabaseConfig::Sqlite { .. } => {
149157
let env_context = EnvContext::new(admin_token);
150-
let docker_compose_context = DockerComposeContext::new_sqlite(
151-
udp_tracker_ports,
152-
http_tracker_ports,
153-
http_api_port,
154-
);
158+
let docker_compose_context = DockerComposeContext::new_sqlite(ports);
155159
(env_context, docker_compose_context)
156160
}
157161
DatabaseConfig::Mysql {
@@ -178,9 +182,7 @@ impl<S> RenderDockerComposeTemplatesStep<S> {
178182
username.clone(),
179183
password.clone(),
180184
*port,
181-
udp_tracker_ports,
182-
http_tracker_ports,
183-
http_api_port,
185+
ports,
184186
);
185187

186188
(env_context, docker_compose_context)

src/infrastructure/templating/docker_compose/template/renderer/docker_compose.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,9 @@ mod tests {
188188
use super::*;
189189
use tempfile::TempDir;
190190

191-
use crate::infrastructure::templating::docker_compose::template::wrappers::docker_compose::DockerComposeContext;
191+
use crate::infrastructure::templating::docker_compose::template::wrappers::docker_compose::{
192+
DockerComposeContext, TrackerPorts,
193+
};
192194

193195
#[test]
194196
fn it_should_create_renderer_with_template_manager() {
@@ -212,15 +214,18 @@ mod tests {
212214
let temp_dir = TempDir::new().unwrap();
213215
let template_manager = Arc::new(TemplateManager::new(temp_dir.path()));
214216

217+
let ports = TrackerPorts {
218+
udp_tracker_ports: vec![6868, 6969],
219+
http_tracker_ports: vec![7070],
220+
http_api_port: 1212,
221+
};
215222
let mysql_context = DockerComposeContext::new_mysql(
216223
"rootpass123".to_string(),
217224
"tracker_db".to_string(),
218225
"tracker_user".to_string(),
219226
"userpass123".to_string(),
220227
3306,
221-
vec![6868, 6969],
222-
vec![7070],
223-
1212,
228+
ports,
224229
);
225230

226231
let renderer = DockerComposeRenderer::new(template_manager);
@@ -297,7 +302,12 @@ mod tests {
297302
let temp_dir = TempDir::new().unwrap();
298303
let template_manager = Arc::new(TemplateManager::new(temp_dir.path()));
299304

300-
let sqlite_context = DockerComposeContext::new_sqlite(vec![6868, 6969], vec![7070], 1212);
305+
let ports = TrackerPorts {
306+
udp_tracker_ports: vec![6868, 6969],
307+
http_tracker_ports: vec![7070],
308+
http_api_port: 1212,
309+
};
310+
let sqlite_context = DockerComposeContext::new_sqlite(ports);
301311

302312
let renderer = DockerComposeRenderer::new(template_manager);
303313
let output_dir = TempDir::new().unwrap();

src/infrastructure/templating/docker_compose/template/renderer/project_generator.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ mod tests {
185185
use tempfile::TempDir;
186186

187187
use super::*;
188+
use crate::infrastructure::templating::docker_compose::template::wrappers::docker_compose::TrackerPorts;
188189
use crate::infrastructure::templating::docker_compose::DOCKER_COMPOSE_SUBFOLDER;
189190

190191
/// Creates a `TemplateManager` that uses the embedded templates
@@ -206,7 +207,12 @@ mod tests {
206207
/// Helper function to create a test docker-compose context with `SQLite`
207208
fn create_test_docker_compose_context_sqlite() -> DockerComposeContext {
208209
// Use default test ports (matching TrackerConfig::default())
209-
DockerComposeContext::new_sqlite(vec![6969], vec![7070], 1212)
210+
let ports = TrackerPorts {
211+
udp_tracker_ports: vec![6969],
212+
http_tracker_ports: vec![7070],
213+
http_api_port: 1212,
214+
};
215+
DockerComposeContext::new_sqlite(ports)
210216
}
211217

212218
#[tokio::test]

src/infrastructure/templating/docker_compose/template/wrappers/docker_compose/context.rs

Lines changed: 65 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@
55
66
use serde::Serialize;
77

8+
/// Tracker port configuration
9+
#[derive(Debug, Clone)]
10+
pub struct TrackerPorts {
11+
/// UDP tracker ports
12+
pub udp_tracker_ports: Vec<u16>,
13+
/// HTTP tracker ports
14+
pub http_tracker_ports: Vec<u16>,
15+
/// HTTP API port
16+
pub http_api_port: u16,
17+
}
18+
819
/// Database configuration for docker-compose template
920
#[derive(Serialize, Debug, Clone)]
1021
pub struct DatabaseConfig {
@@ -50,32 +61,31 @@ impl DockerComposeContext {
5061
///
5162
/// # Arguments
5263
///
53-
/// * `udp_tracker_ports` - UDP tracker ports to expose
54-
/// * `http_tracker_ports` - HTTP tracker ports to expose
55-
/// * `http_api_port` - HTTP API port to expose
64+
/// * `ports` - Tracker port configuration
5665
///
5766
/// # Examples
5867
///
5968
/// ```rust
60-
/// use torrust_tracker_deployer_lib::infrastructure::templating::docker_compose::template::wrappers::docker_compose::DockerComposeContext;
69+
/// use torrust_tracker_deployer_lib::infrastructure::templating::docker_compose::template::wrappers::docker_compose::{DockerComposeContext, TrackerPorts};
6170
///
62-
/// let context = DockerComposeContext::new_sqlite(vec![6868, 6969], vec![7070], 1212);
71+
/// let ports = TrackerPorts {
72+
/// udp_tracker_ports: vec![6868, 6969],
73+
/// http_tracker_ports: vec![7070],
74+
/// http_api_port: 1212,
75+
/// };
76+
/// let context = DockerComposeContext::new_sqlite(ports);
6377
/// assert_eq!(context.database().driver(), "sqlite3");
6478
/// ```
6579
#[must_use]
66-
pub fn new_sqlite(
67-
udp_tracker_ports: Vec<u16>,
68-
http_tracker_ports: Vec<u16>,
69-
http_api_port: u16,
70-
) -> Self {
80+
pub fn new_sqlite(ports: TrackerPorts) -> Self {
7181
Self {
7282
database: DatabaseConfig {
7383
driver: "sqlite3".to_string(),
7484
mysql: None,
7585
},
76-
udp_tracker_ports,
77-
http_tracker_ports,
78-
http_api_port,
86+
udp_tracker_ports: ports.udp_tracker_ports,
87+
http_tracker_ports: ports.http_tracker_ports,
88+
http_api_port: ports.http_api_port,
7989
}
8090
}
8191

@@ -88,24 +98,25 @@ impl DockerComposeContext {
8898
/// * `user` - `MySQL` user
8999
/// * `password` - `MySQL` password
90100
/// * `port` - `MySQL` port
91-
/// * `udp_tracker_ports` - UDP tracker ports to expose
92-
/// * `http_tracker_ports` - HTTP tracker ports to expose
93-
/// * `http_api_port` - HTTP API port to expose
101+
/// * `ports` - Tracker port configuration
94102
///
95103
/// # Examples
96104
///
97105
/// ```rust
98-
/// use torrust_tracker_deployer_lib::infrastructure::templating::docker_compose::template::wrappers::docker_compose::DockerComposeContext;
106+
/// use torrust_tracker_deployer_lib::infrastructure::templating::docker_compose::template::wrappers::docker_compose::{DockerComposeContext, TrackerPorts};
99107
///
108+
/// let ports = TrackerPorts {
109+
/// udp_tracker_ports: vec![6868, 6969],
110+
/// http_tracker_ports: vec![7070],
111+
/// http_api_port: 1212,
112+
/// };
100113
/// let context = DockerComposeContext::new_mysql(
101114
/// "root_pass".to_string(),
102115
/// "tracker_db".to_string(),
103116
/// "tracker_user".to_string(),
104117
/// "user_pass".to_string(),
105118
/// 3306,
106-
/// vec![6868, 6969],
107-
/// vec![7070],
108-
/// 1212,
119+
/// ports,
109120
/// );
110121
/// assert_eq!(context.database().driver(), "mysql");
111122
/// ```
@@ -116,9 +127,7 @@ impl DockerComposeContext {
116127
user: String,
117128
password: String,
118129
port: u16,
119-
udp_tracker_ports: Vec<u16>,
120-
http_tracker_ports: Vec<u16>,
121-
http_api_port: u16,
130+
ports: TrackerPorts,
122131
) -> Self {
123132
Self {
124133
database: DatabaseConfig {
@@ -131,9 +140,9 @@ impl DockerComposeContext {
131140
port,
132141
}),
133142
},
134-
udp_tracker_ports,
135-
http_tracker_ports,
136-
http_api_port,
143+
udp_tracker_ports: ports.udp_tracker_ports,
144+
http_tracker_ports: ports.http_tracker_ports,
145+
http_api_port: ports.http_api_port,
137146
}
138147
}
139148

@@ -182,7 +191,12 @@ mod tests {
182191

183192
#[test]
184193
fn it_should_create_context_with_sqlite_configuration() {
185-
let context = DockerComposeContext::new_sqlite(vec![6868, 6969], vec![7070], 1212);
194+
let ports = TrackerPorts {
195+
udp_tracker_ports: vec![6868, 6969],
196+
http_tracker_ports: vec![7070],
197+
http_api_port: 1212,
198+
};
199+
let context = DockerComposeContext::new_sqlite(ports);
186200

187201
assert_eq!(context.database().driver(), "sqlite3");
188202
assert!(context.database().mysql().is_none());
@@ -193,15 +207,18 @@ mod tests {
193207

194208
#[test]
195209
fn it_should_create_context_with_mysql_configuration() {
210+
let ports = TrackerPorts {
211+
udp_tracker_ports: vec![6868, 6969],
212+
http_tracker_ports: vec![7070],
213+
http_api_port: 1212,
214+
};
196215
let context = DockerComposeContext::new_mysql(
197216
"root123".to_string(),
198217
"tracker".to_string(),
199218
"tracker_user".to_string(),
200219
"pass456".to_string(),
201220
3306,
202-
vec![6868, 6969],
203-
vec![7070],
204-
1212,
221+
ports,
205222
);
206223

207224
assert_eq!(context.database().driver(), "mysql");
@@ -221,7 +238,12 @@ mod tests {
221238

222239
#[test]
223240
fn it_should_be_serializable_with_sqlite() {
224-
let context = DockerComposeContext::new_sqlite(vec![6868, 6969], vec![7070], 1212);
241+
let ports = TrackerPorts {
242+
udp_tracker_ports: vec![6868, 6969],
243+
http_tracker_ports: vec![7070],
244+
http_api_port: 1212,
245+
};
246+
let context = DockerComposeContext::new_sqlite(ports);
225247

226248
let serialized = serde_json::to_string(&context).unwrap();
227249
assert!(serialized.contains("sqlite3"));
@@ -230,15 +252,18 @@ mod tests {
230252

231253
#[test]
232254
fn it_should_be_serializable_with_mysql() {
255+
let ports = TrackerPorts {
256+
udp_tracker_ports: vec![6868, 6969],
257+
http_tracker_ports: vec![7070],
258+
http_api_port: 1212,
259+
};
233260
let context = DockerComposeContext::new_mysql(
234261
"root".to_string(),
235262
"db".to_string(),
236263
"user".to_string(),
237264
"pass".to_string(),
238265
3306,
239-
vec![6868, 6969],
240-
vec![7070],
241-
1212,
266+
ports,
242267
);
243268

244269
let serialized = serde_json::to_string(&context).unwrap();
@@ -252,15 +277,18 @@ mod tests {
252277

253278
#[test]
254279
fn it_should_be_cloneable() {
280+
let ports = TrackerPorts {
281+
udp_tracker_ports: vec![6868, 6969],
282+
http_tracker_ports: vec![7070],
283+
http_api_port: 1212,
284+
};
255285
let context = DockerComposeContext::new_mysql(
256286
"root".to_string(),
257287
"db".to_string(),
258288
"user".to_string(),
259289
"pass".to_string(),
260290
3306,
261-
vec![6868, 6969],
262-
vec![7070],
263-
1212,
291+
ports,
264292
);
265293

266294
let cloned = context.clone();
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
pub mod context;
22
pub mod template;
33

4-
pub use context::DockerComposeContext;
4+
pub use context::{DockerComposeContext, TrackerPorts};
55
pub use template::DockerComposeTemplate;

0 commit comments

Comments
 (0)