Skip to content

Commit 072ac9e

Browse files
committed
feat: [#229] add schemars 1.1 dependency and JsonSchema derives to config types
1 parent 4fcd0fb commit 072ac9e

File tree

11 files changed

+25
-13
lines changed

11 files changed

+25
-13
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ figment = { version = "0.10", features = [ "json" ] }
5050
parking_lot = "0.12"
5151
reqwest = "0.12"
5252
rust-embed = "8.0"
53+
schemars = "1.1"
5354
serde = { version = "1.0", features = [ "derive" ] }
5455
serde_json = "1.0"
5556
tempfile = "3.0"

src/application/command_handlers/create/config/environment_config.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! all configuration needed to create a deployment environment. It handles
55
//! deserialization from configuration sources and conversion to domain types.
66
7+
use schemars::JsonSchema;
78
use serde::{Deserialize, Serialize};
89

910
use crate::adapters::ssh::SshCredentials;
@@ -69,7 +70,7 @@ use super::tracker::TrackerSection;
6970
/// let config: EnvironmentCreationConfig = serde_json::from_str(json)?;
7071
/// # Ok::<(), Box<dyn std::error::Error>>(())
7172
/// ```
72-
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
73+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
7374
pub struct EnvironmentCreationConfig {
7475
/// Environment-specific settings
7576
pub environment: EnvironmentSection,
@@ -93,7 +94,7 @@ pub struct EnvironmentCreationConfig {
9394
/// Environment-specific configuration section
9495
///
9596
/// Contains configuration specific to the environment being created.
96-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
97+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
9798
pub struct EnvironmentSection {
9899
/// Name of the environment to create
99100
///

src/application/command_handlers/create/config/provider/hetzner.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! Uses raw `String` fields for JSON deserialization, which are then validated
55
//! when converting to domain types.
66
7+
use schemars::JsonSchema;
78
use serde::{Deserialize, Serialize};
89

910
/// Hetzner-specific configuration section
@@ -23,7 +24,7 @@ use serde::{Deserialize, Serialize};
2324
/// image: "ubuntu-24.04".to_string(),
2425
/// };
2526
/// ```
26-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
2728
pub struct HetznerProviderSection {
2829
/// Hetzner API token (raw string).
2930
pub api_token: String,

src/application/command_handlers/create/config/provider/lxd.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! Uses raw `String` for JSON deserialization, which is then validated
55
//! when converting to domain types.
66
7+
use schemars::JsonSchema;
78
use serde::{Deserialize, Serialize};
89

910
/// LXD-specific configuration section
@@ -20,7 +21,7 @@ use serde::{Deserialize, Serialize};
2021
/// profile_name: "torrust-profile-dev".to_string(),
2122
/// };
2223
/// ```
23-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
2425
pub struct LxdProviderSection {
2526
/// LXD profile name (raw string - validated on conversion).
2627
pub profile_name: String,

src/application/command_handlers/create/config/provider/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ mod lxd;
4040
pub use hetzner::HetznerProviderSection;
4141
pub use lxd::LxdProviderSection;
4242

43+
use schemars::JsonSchema;
4344
use serde::{Deserialize, Serialize};
4445

4546
use crate::application::command_handlers::create::config::CreateConfigError;
@@ -71,7 +72,7 @@ use crate::domain::ProfileName;
7172
/// let config = section.to_provider_config().unwrap();
7273
/// assert_eq!(config.provider_name(), "lxd");
7374
/// ```
74-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
75+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
7576
#[serde(tag = "provider")]
7677
pub enum ProviderSection {
7778
/// LXD provider configuration

src/application/command_handlers/create/config/ssh_credentials_config.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
//! SSH credentials in the configuration layer (distinct from the adapter layer).
55
//! It handles string-based paths and usernames that will be converted to domain types.
66
7-
use serde::{Deserialize, Serialize};
87
use std::path::PathBuf;
98

9+
use schemars::JsonSchema;
10+
use serde::{Deserialize, Serialize};
11+
1012
use crate::adapters::ssh::SshCredentials;
1113
use crate::shared::Username;
1214

@@ -36,7 +38,7 @@ const DEFAULT_SSH_PORT: u16 = 22;
3638
/// port: 22,
3739
/// };
3840
/// ```
39-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
41+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
4042
pub struct SshCredentialsConfig {
4143
/// Path to the SSH private key file (as string in config)
4244
pub private_key_path: String,

src/application/command_handlers/create/config/tracker/http_api_section.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use std::net::SocketAddr;
22

3+
use schemars::JsonSchema;
34
use serde::{Deserialize, Serialize};
45

56
use crate::application::command_handlers::create::config::errors::CreateConfigError;
67
use crate::domain::tracker::HttpApiConfig;
78

8-
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
9+
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, JsonSchema)]
910
pub struct HttpApiSection {
1011
pub bind_address: String,
1112
pub admin_token: String,

src/application/command_handlers/create/config/tracker/http_tracker_section.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use std::net::SocketAddr;
22

3+
use schemars::JsonSchema;
34
use serde::{Deserialize, Serialize};
45

56
use crate::application::command_handlers::create::config::errors::CreateConfigError;
67
use crate::domain::tracker::HttpTrackerConfig;
78

8-
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
9+
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, JsonSchema)]
910
pub struct HttpTrackerSection {
1011
pub bind_address: String,
1112
}

src/application/command_handlers/create/config/tracker/tracker_core_section.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! used for JSON deserialization and validation before converting
55
//! to domain types.
66
7+
use schemars::JsonSchema;
78
use serde::{Deserialize, Serialize};
89

910
use crate::application::command_handlers::create::config::errors::CreateConfigError;
@@ -22,7 +23,7 @@ use crate::domain::tracker::{DatabaseConfig, TrackerCoreConfig};
2223
/// "database_name": "tracker.db"
2324
/// }
2425
/// ```
25-
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
26+
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, JsonSchema)]
2627
#[serde(tag = "driver")]
2728
pub enum DatabaseSection {
2829
/// `SQLite` file-based database
@@ -65,7 +66,7 @@ impl DatabaseSection {
6566
/// "private": false
6667
/// }
6768
/// ```
68-
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
69+
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, JsonSchema)]
6970
pub struct TrackerCoreSection {
7071
/// Database configuration
7172
pub database: DatabaseSection,

src/application/command_handlers/create/config/tracker/tracker_section.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//! This module provides the aggregated DTO for complete tracker configuration,
44
//! used for JSON deserialization and validation before converting to domain types.
55
6+
use schemars::JsonSchema;
67
use serde::{Deserialize, Serialize};
78

89
use super::{HttpApiSection, HttpTrackerSection, TrackerCoreSection, UdpTrackerSection};
@@ -37,7 +38,7 @@ use crate::domain::tracker::{HttpApiConfig, HttpTrackerConfig, TrackerConfig, Ud
3738
/// }
3839
/// }
3940
/// ```
40-
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
41+
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, JsonSchema)]
4142
pub struct TrackerSection {
4243
/// Core tracker configuration (database, privacy mode)
4344
pub core: TrackerCoreSection,

0 commit comments

Comments
 (0)