Skip to content

Commit 4348d89

Browse files
committed
refactor: clean up comment numbering and formatting across codebase
1 parent db7ae7d commit 4348d89

7 files changed

Lines changed: 139 additions & 145 deletions

File tree

rcman-derive/src/lib.rs

Lines changed: 57 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -290,11 +290,17 @@ fn generate_accessor_methods(
290290
));
291291
};
292292

293-
if attrs.nested || attrs.flatten || is_nested_struct(&field.ty) {
293+
let is_structural = match attrs.nesting {
294+
Nesting::Flatten | Nesting::Nested => true,
295+
Nesting::Object => false,
296+
Nesting::Auto => is_nested_struct(&field.ty),
297+
};
298+
299+
if is_structural {
294300
return Ok(None);
295301
}
296302

297-
let category = resolve_field_category(attrs, container_attrs)?;
303+
let category = resolve_field_category(attrs, container_attrs);
298304
let key_name = attrs
299305
.rename
300306
.clone()
@@ -324,27 +330,15 @@ fn generate_accessor_methods(
324330
format!("{category}.{key_name}")
325331
};
326332

327-
let snapshot_method = if cfg_attrs.is_empty() {
328-
quote! {
329-
pub fn #getter_name(&self) -> &#field_type {
330-
&self.#field_name
331-
}
332-
333-
pub fn #setter_name(&mut self, value: #field_type) {
334-
self.#field_name = value;
335-
}
333+
let snapshot_method = quote! {
334+
#(#cfg_attrs)*
335+
pub fn #getter_name(&self) -> &#field_type {
336+
&self.#field_name
336337
}
337-
} else {
338-
quote! {
339-
#(#cfg_attrs)*
340-
pub fn #getter_name(&self) -> &#field_type {
341-
&self.#field_name
342-
}
343338

344-
#(#cfg_attrs)*
345-
pub fn #setter_name(&mut self, value: #field_type) {
346-
self.#field_name = value;
347-
}
339+
#(#cfg_attrs)*
340+
pub fn #setter_name(&mut self, value: #field_type) {
341+
self.#field_name = value;
348342
}
349343
};
350344

@@ -355,41 +349,22 @@ fn generate_accessor_methods(
355349
return Ok(Some((snapshot_method, quote! {}, quote! {})));
356350
}
357351

358-
let manager_trait_method = if cfg_attrs.is_empty() {
359-
quote! {
360-
fn #getter_name(&self) -> rcman::Result<#field_type>;
361-
fn #setter_name(&self, value: #field_type) -> rcman::Result<()>;
362-
}
363-
} else {
364-
quote! {
365-
#(#cfg_attrs)*
366-
fn #getter_name(&self) -> rcman::Result<#field_type>;
367-
#(#cfg_attrs)*
368-
fn #setter_name(&self, value: #field_type) -> rcman::Result<()>;
369-
}
352+
let manager_trait_method = quote! {
353+
#(#cfg_attrs)*
354+
fn #getter_name(&self) -> rcman::Result<#field_type>;
355+
#(#cfg_attrs)*
356+
fn #setter_name(&self, value: #field_type) -> rcman::Result<()>;
370357
};
371358

372-
let manager_impl_method = if cfg_attrs.is_empty() {
373-
quote! {
374-
fn #getter_name(&self) -> rcman::Result<#field_type> {
375-
self.get::<#field_type>(#full_key)
376-
}
377-
378-
fn #setter_name(&self, value: #field_type) -> rcman::Result<()> {
379-
self.save_setting(#category, #key_name, &rcman::serde_json::json!(value))
380-
}
359+
let manager_impl_method = quote! {
360+
#(#cfg_attrs)*
361+
fn #getter_name(&self) -> rcman::Result<#field_type> {
362+
self.get::<#field_type>(#full_key)
381363
}
382-
} else {
383-
quote! {
384-
#(#cfg_attrs)*
385-
fn #getter_name(&self) -> rcman::Result<#field_type> {
386-
self.get::<#field_type>(#full_key)
387-
}
388364

389-
#(#cfg_attrs)*
390-
fn #setter_name(&self, value: #field_type) -> rcman::Result<()> {
391-
self.save_setting(#category, #key_name, &rcman::serde_json::json!(value))
392-
}
365+
#(#cfg_attrs)*
366+
fn #setter_name(&self, value: #field_type) -> rcman::Result<()> {
367+
self.save_setting(#category, #key_name, &rcman::serde_json::json!(value))
393368
}
394369
};
395370

@@ -458,8 +433,14 @@ fn process_field(
458433

459434
// Check if this is a nested struct.
460435
// We auto-detect simple structs, but allow explicit `nested`, `flatten` or explicit `object` override.
461-
if !attrs.object && (attrs.flatten || attrs.nested || is_nested_struct(field_type)) {
462-
let prefix = if attrs.flatten {
436+
let is_structural = match attrs.nesting {
437+
Nesting::Flatten | Nesting::Nested => true,
438+
Nesting::Object => false,
439+
Nesting::Auto => is_nested_struct(field_type),
440+
};
441+
442+
if is_structural {
443+
let prefix = if attrs.nesting == Nesting::Flatten {
463444
None
464445
} else {
465446
Some(field_name.to_string())
@@ -477,7 +458,7 @@ fn process_field(
477458

478459
validate_field_type_constraints(field, type_info, attrs)?;
479460

480-
let category_str = resolve_field_category(attrs, container_attrs)?;
461+
let category_str = resolve_field_category(attrs, container_attrs);
481462
let final_field_name = attrs
482463
.rename
483464
.clone()
@@ -634,16 +615,13 @@ fn validate_field_type_constraints(
634615
Ok(())
635616
}
636617

637-
fn resolve_field_category(
638-
attrs: &FieldAttrs,
639-
container_attrs: &ContainerAttrs,
640-
) -> Result<String, syn::Error> {
641-
Ok(attrs
618+
fn resolve_field_category(attrs: &FieldAttrs, container_attrs: &ContainerAttrs) -> String {
619+
attrs
642620
.category
643621
.as_ref()
644622
.or(container_attrs.category.as_ref())
645623
.cloned()
646-
.unwrap_or_default())
624+
.unwrap_or_default()
647625
}
648626

649627
fn generate_field_constructor(
@@ -728,19 +706,17 @@ fn parse_field_attrs(attrs: &[Attribute]) -> Result<FieldAttrs, syn::Error> {
728706
match meta {
729707
Meta::Path(path) => {
730708
if path.is_ident("flatten") {
731-
result.flatten = true;
709+
result.nesting = Nesting::Flatten;
732710
} else if path.is_ident("skip") {
733711
result.skip = true;
734712
}
735713
}
736714
Meta::NameValue(nv) => {
737715
if nv.path.is_ident("rename") && result.rename.is_none() {
738-
if let Ok(s) = parse_lit_str(&nv.value, "rename") {
739-
result.rename = Some(s);
740-
}
716+
result.rename = parse_lit_str(&nv.value, "rename").ok();
741717
}
742718
}
743-
_ => {}
719+
Meta::List(_) => {}
744720
}
745721
}
746722
}
@@ -758,11 +734,11 @@ fn parse_single_field_attr(meta: Meta, result: &mut FieldAttrs) -> Result<(), sy
758734
} else if path.is_ident("skip") {
759735
result.skip = true;
760736
} else if path.is_ident("nested") {
761-
result.nested = true;
737+
result.nesting = Nesting::Nested;
762738
} else if path.is_ident("object") {
763-
result.object = true;
739+
result.nesting = Nesting::Object;
764740
} else if path.is_ident("flatten") {
765-
result.flatten = true;
741+
result.nesting = Nesting::Flatten;
766742
}
767743
}
768744
Meta::NameValue(nv) => {
@@ -829,6 +805,15 @@ struct ContainerAttrs {
829805
category: Option<String>,
830806
}
831807

808+
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
809+
enum Nesting {
810+
#[default]
811+
Auto,
812+
Flatten,
813+
Nested,
814+
Object,
815+
}
816+
832817
/// Field-level attributes from #[setting(...)]
833818
#[derive(Default)]
834819
struct FieldAttrs {
@@ -841,9 +826,7 @@ struct FieldAttrs {
841826
reserved: Vec<String>,
842827
secret: bool,
843828
skip: bool,
844-
flatten: bool,
845-
nested: bool, // Explicit marker for nested structs
846-
object: bool, // Explicit marker to treat as a single object (disables auto-nesting)
829+
nesting: Nesting,
847830
rename: Option<String>,
848831
// Dynamic metadata: any key=value that isn't a known constraint
849832
metadata_str: Vec<(String, String)>,
@@ -932,9 +915,8 @@ fn parse_metadata_value(
932915
Ok(())
933916
}
934917
Lit::Int(i) => {
935-
if let Ok(val) = i.base10_parse::<i64>() {
936-
#[allow(clippy::cast_precision_loss)]
937-
result.metadata_num.push((key, val as f64));
918+
if let Ok(val) = i.base10_parse::<f64>() {
919+
result.metadata_num.push((key, val));
938920
}
939921
Ok(())
940922
}

src/backup/operations.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ impl<'a, S: StorageBackend + 'static, Schema: SettingsSchema> BackupManager<'a,
259259
let mut contents = BackupContents::default();
260260
let mut total_size = 0u64;
261261

262-
// 1. Main settings
262+
// Main settings
263263
let include_settings = (options.include_settings
264264
|| matches!(options.export_type, ExportType::Full))
265265
&& !matches!(options.export_type, ExportType::Single { .. });
@@ -271,7 +271,7 @@ impl<'a, S: StorageBackend + 'static, Schema: SettingsSchema> BackupManager<'a,
271271
contents.settings = true;
272272
}
273273

274-
// 2. Sub-settings
274+
// Sub-settings
275275
let sub_settings_to_backup = match &options.export_type {
276276
ExportType::Full => {
277277
if options.include_sub_settings.is_empty() {
@@ -326,7 +326,7 @@ impl<'a, S: StorageBackend + 'static, Schema: SettingsSchema> BackupManager<'a,
326326
}
327327
}
328328

329-
// 3. External configs
329+
// External configs
330330
let include_external_configs = matches!(options.export_type, ExportType::Full)
331331
|| !options.include_external_configs.is_empty();
332332

@@ -544,9 +544,9 @@ impl<'a, S: StorageBackend + 'static, Schema: SettingsSchema> BackupManager<'a,
544544
if let Some(creds) = creds_opt {
545545
// Build the full credential key (prefix.field or just field if prefix is empty)
546546
let credential_key = if prefix.is_empty() {
547-
full_key.to_string()
547+
full_key.clone()
548548
} else {
549-
format!("{}.{}", prefix, full_key)
549+
format!("{prefix}.{full_key}")
550550
};
551551

552552
// Try to get the secret
@@ -561,8 +561,7 @@ impl<'a, S: StorageBackend + 'static, Schema: SettingsSchema> BackupManager<'a,
561561
Ok(None) => {}
562562
Err(err) => {
563563
debug!(
564-
"Failed to fetch secret '{}' (credential_key: '{}'): {err}",
565-
relative_key, credential_key
564+
"Failed to fetch secret '{relative_key}' (credential_key: '{credential_key}'): {err}"
566565
);
567566
}
568567
}
@@ -656,7 +655,7 @@ impl<'a, S: StorageBackend + 'static, Schema: SettingsSchema> BackupManager<'a,
656655
if let Some(obj) = root_value.as_object_mut() {
657656
for (entry_name, entry_value) in obj.iter_mut() {
658657
// Build credential key prefix: "sub.connections.Local"
659-
let credential_key_prefix = format!("sub.{}.{}", sub_type, entry_name);
658+
let credential_key_prefix = format!("sub.{sub_type}.{entry_name}");
660659
self.inject_or_remove_secrets(
661660
entry_value,
662661
&credential_key_prefix,
@@ -699,7 +698,7 @@ impl<'a, S: StorageBackend + 'static, Schema: SettingsSchema> BackupManager<'a,
699698
};
700699

701700
// Build credential key prefix: "sub.remotes.Google Drive"
702-
let credential_key_prefix = format!("sub.{}.{}", sub_type, name);
701+
let credential_key_prefix = format!("sub.{sub_type}.{name}");
703702

704703
self.inject_or_remove_secrets(
705704
&mut value,

src/backup/restore.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,13 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> super::BackupManager<'
119119
mode_str,
120120
};
121121

122-
// 1. Restore main settings
122+
// Restore main settings
123123
ctx.restore_main_settings(&mut result)?;
124124

125-
// 2. Restore sub-settings
125+
// Restore sub-settings
126126
ctx.restore_sub_settings_entries(&mut result)?;
127127

128-
// 3. Restore external configs
128+
// Restore external configs
129129
ctx.restore_external_configs_entries(&mut result)?;
130130

131131
info!(
@@ -1036,7 +1036,7 @@ fn load_settings_agnostic<S: StorageBackend>(
10361036
stem: &str,
10371037
storage: &S,
10381038
) -> Result<Option<(serde_json::Value, String)>> {
1039-
// 0. Try configured storage extension
1039+
// Try configured storage extension
10401040
let current_ext = storage.extension();
10411041
let current_path = dir.join(format!("{stem}.{current_ext}"));
10421042
if current_path.exists() {

src/manager/operations.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
378378

379379
let mut categories = Vec::new();
380380

381-
// 1. Main settings
381+
// Main settings
382382
categories.push(ExportCategory {
383383
id: "settings".to_string(),
384384
name: "Application Settings".to_string(),
@@ -387,7 +387,7 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
387387
description: Some("Main application settings".to_string()),
388388
});
389389

390-
// 2. Sub-settings
390+
// Sub-settings
391391
let sub_types = self.sub_settings_types();
392392
for sub_type in sub_types {
393393
categories.push(ExportCategory {
@@ -399,7 +399,7 @@ impl<S: StorageBackend + 'static, Schema: SettingsSchema> SettingsManager<S, Sch
399399
});
400400
}
401401

402-
// 3. External configs
402+
// External configs
403403
for ext in &self.config.external_configs {
404404
categories.push(ExportCategory {
405405
id: ext.id.clone(),

0 commit comments

Comments
 (0)