From 415dbe08d4940b2f8a3ce1ef43d2b1e7036591c1 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Fri, 26 Jun 2026 23:06:40 +0300 Subject: [PATCH] refactor: move resource/IO root modules under io/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Relocate three root-level modules into io/, where they belong by concern: - update_check.rs -> io/update_check.rs (its own doc-comment notes it mirrors how crate::io wraps blocking calls in async). - patterns.rs, linetypes.rs -> io/ (standard resource catalogs parsed from asset files and populated into the document — IO-shaped work). Fix the moved files' include_str! paths (one level deeper), add the mod declarations to io/mod.rs, drop them from lib.rs/main.rs, and re-point all crate:: references to crate::io::. No behavior change. Co-Authored-By: Claude Opus 4.8 --- src/app/document.rs | 2 +- src/app/layers.rs | 2 +- src/app/mod.rs | 4 ++-- src/app/properties.rs | 2 +- src/app/update/file.rs | 2 +- src/app/update/mod.rs | 4 ++-- src/{ => io}/linetypes.rs | 2 +- src/io/mod.rs | 5 ++++- src/{ => io}/patterns.rs | 2 +- src/{ => io}/update_check.rs | 0 src/lib.rs | 3 --- src/main.rs | 3 --- src/scene/model/hatch_patterns.rs | 4 ++-- src/scene/tess.rs | 2 +- src/scene/text/complex_lt.rs | 2 +- 15 files changed, 18 insertions(+), 21 deletions(-) rename src/{ => io}/linetypes.rs (99%) rename src/{ => io}/patterns.rs (98%) rename src/{ => io}/update_check.rs (100%) diff --git a/src/app/document.rs b/src/app/document.rs index 9fbb2adc8..e18ed9b7a 100644 --- a/src/app/document.rs +++ b/src/app/document.rs @@ -1,5 +1,5 @@ use crate::command::CadCommand; -use crate::linetypes; +use crate::io::linetypes; use crate::modules::draw::modify::refedit::RefEditSession; use crate::scene::pick::grip::GripEdit; use crate::scene::GripDef; diff --git a/src/app/layers.rs b/src/app/layers.rs index 849cb0766..81de99169 100644 --- a/src/app/layers.rs +++ b/src/app/layers.rs @@ -60,7 +60,7 @@ impl OpenCADStudio { } else { lt.name.clone() }; - let art = crate::linetypes::extract_pattern(<.description); + let art = crate::io::linetypes::extract_pattern(<.description); ui::properties::LinetypeItem { name, art } }) .collect(); diff --git a/src/app/mod.rs b/src/app/mod.rs index a7ae6a93f..2be3f1ce3 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1476,7 +1476,7 @@ pub enum Message { Noop, /// GitHub releases API returned a result. `Some(version)` means a /// newer release exists; we open the update-notice window. - UpdateCheckResult(Option), + UpdateCheckResult(Option), /// User dismissed the update-notice window. UpdateNoticeClose, /// First-launch default-association prompt: user accepted — register this @@ -2072,7 +2072,7 @@ impl OpenCADStudio { s.main_window = Some(id); let open_main = open_task.map(|_| Message::Noop); let check_update = Task::perform( - crate::update_check::check_for_update(), + crate::io::update_check::check_for_update(), Message::UpdateCheckResult, ); let focus_cmd = s.focus_cmd_input(); diff --git a/src/app/properties.rs b/src/app/properties.rs index 9890d8153..8642b0137 100644 --- a/src/app/properties.rs +++ b/src/app/properties.rs @@ -1,6 +1,6 @@ use super::helpers::{entity_type_key, entity_type_label, title_case_word}; use super::{OpenCADStudio, VARIES_LABEL}; -use crate::linetypes; +use crate::io::linetypes; use crate::scene::view::dispatch; use crate::ui; use acadrust::{EntityType, Handle}; diff --git a/src/app/update/file.rs b/src/app/update/file.rs index 7abc06a09..dde85a6c0 100644 --- a/src/app/update/file.rs +++ b/src/app/update/file.rs @@ -341,7 +341,7 @@ pub(super) fn on_open_file(&mut self) -> Task { self.tabs[i].scene.selected = rustc_hash::FxHashSet::default(); self.tabs[i].scene.preview_wires = vec![]; self.tabs[i].scene.current_layout = "Model".to_string(); - crate::linetypes::populate_document(&mut self.tabs[i].scene.document); + crate::io::linetypes::populate_document(&mut self.tabs[i].scene.document); self.tabs[i].properties = PropertiesPanel::empty(); // Seed the current table / multileader style from the file's // header so the ✓ marks the right one (text/dim/mline come from diff --git a/src/app/update/mod.rs b/src/app/update/mod.rs index 16929aa5b..ef0ef40a8 100644 --- a/src/app/update/mod.rs +++ b/src/app/update/mod.rs @@ -537,7 +537,7 @@ impl OpenCADStudio { let i = self.active_tab; self.push_undo_snapshot(i, "CLEAR"); self.tabs[i].scene.clear(); - crate::linetypes::populate_document(&mut self.tabs[i].scene.document); + crate::io::linetypes::populate_document(&mut self.tabs[i].scene.document); self.tabs[i].properties = PropertiesPanel::empty(); let doc_layers = self.tabs[i].scene.document.layers.clone(); let vp_info = self.tabs[i].scene.viewport_list(); @@ -2449,7 +2449,7 @@ impl OpenCADStudio { Task::none() } Message::UpdateNoticeOpenRelease => { - crate::sys::open_url(crate::update_check::RELEASES_PAGE); + crate::sys::open_url(crate::io::update_check::RELEASES_PAGE); self.close_active_modal(); Task::none() } diff --git a/src/linetypes.rs b/src/io/linetypes.rs similarity index 99% rename from src/linetypes.rs rename to src/io/linetypes.rs index ac3ef1b08..3c67f0f75 100644 --- a/src/linetypes.rs +++ b/src/io/linetypes.rs @@ -69,7 +69,7 @@ pub fn complex_lt(name: &str) -> Option<&'static ComplexLt> { .get(&name.to_ascii_uppercase()) } -const LIN_SOURCE: &str = include_str!("../assets/linetypes/OpenCADStudio.lin"); +const LIN_SOURCE: &str = include_str!("../../assets/linetypes/OpenCADStudio.lin"); // ── Pattern art extraction ──────────────────────────────────────────────── diff --git a/src/io/mod.rs b/src/io/mod.rs index d217fe7ba..7c1704385 100644 --- a/src/io/mod.rs +++ b/src/io/mod.rs @@ -11,6 +11,9 @@ pub mod print_to_printer; pub mod step; pub mod stl; pub mod xref; +pub mod linetypes; +pub mod patterns; +pub mod update_check; use crate::scene::DerivedCaches; use acadrust::entities::{Dimension, EntityType}; @@ -879,7 +882,7 @@ mod layer_roundtrip_tests { // round-trip through `ext`, and return whether every one survived. fn roundtrip_layers(ext: &str, count: usize) -> bool { let mut doc = CadDocument::new(); - crate::linetypes::populate_document(&mut doc); + crate::io::linetypes::populate_document(&mut doc); let names: Vec = (0..count).map(|n| format!("Layer{}", n + 1)).collect(); for name in &names { let mut dl = DocLayer::new(name); diff --git a/src/patterns.rs b/src/io/patterns.rs similarity index 98% rename from src/patterns.rs rename to src/io/patterns.rs index 5ffd20b40..47f6f1c38 100644 --- a/src/patterns.rs +++ b/src/io/patterns.rs @@ -8,7 +8,7 @@ use std::sync::OnceLock; -const PAT_SRC: &str = include_str!("../assets/patterns/OpenCADStudio.pat"); +const PAT_SRC: &str = include_str!("../../assets/patterns/OpenCADStudio.pat"); // ── Public types ────────────────────────────────────────────────────────── diff --git a/src/update_check.rs b/src/io/update_check.rs similarity index 100% rename from src/update_check.rs rename to src/io/update_check.rs diff --git a/src/lib.rs b/src/lib.rs index cf4655fbe..8320c41df 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,13 +6,10 @@ pub mod cli; pub mod command; pub mod entities; pub mod io; -pub mod linetypes; pub mod modules; pub mod plugin; -pub mod patterns; pub mod scene; pub mod snap; pub mod ui; pub mod par; pub mod sys; -pub mod update_check; diff --git a/src/main.rs b/src/main.rs index 178e63365..fae0a347f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,16 +10,13 @@ mod cli; mod command; mod entities; mod io; -mod linetypes; mod modules; mod plugin; -mod patterns; mod scene; mod snap; mod ui; mod par; mod sys; -mod update_check; fn main() -> iced::Result { // Web (wasm) uses the single-window entry; native uses the multi-window diff --git a/src/scene/model/hatch_patterns.rs b/src/scene/model/hatch_patterns.rs index 44350a8b8..a093c20f0 100644 --- a/src/scene/model/hatch_patterns.rs +++ b/src/scene/model/hatch_patterns.rs @@ -6,7 +6,7 @@ use std::sync::OnceLock; -use crate::patterns::PatLineDef; +use crate::io::patterns::PatLineDef; use crate::scene::model::hatch_model::{HatchPattern, PatFamily}; use acadrust::entities::{HatchPattern as DxfPattern, HatchPatternLine}; use acadrust::types::Vector2; @@ -65,7 +65,7 @@ fn build_catalog() -> Vec { pat_lines: vec![], }]; - for def in crate::patterns::catalog() { + for def in crate::io::patterns::catalog() { entries.push(PatternEntry { name: def.name.clone(), description: def.description.clone(), diff --git a/src/scene/tess.rs b/src/scene/tess.rs index a75775e8d..ebaa223ca 100644 --- a/src/scene/tess.rs +++ b/src/scene/tess.rs @@ -665,7 +665,7 @@ pub(crate) fn tessellate_entity( // linetype assigned, so we only consult the first wire here — multi-wire // returns come exclusively from MTEXT colour splits which can't trigger // this path. - if let Some(clt) = crate::linetypes::complex_lt(lt_name) { + if let Some(clt) = crate::io::linetypes::complex_lt(lt_name) { if let Some(base) = bases.first() { let mut wires = text::complex_lt::apply_along( &base.name, diff --git a/src/scene/text/complex_lt.rs b/src/scene/text/complex_lt.rs index 85e68cc9e..d89ad0ed2 100644 --- a/src/scene/text/complex_lt.rs +++ b/src/scene/text/complex_lt.rs @@ -7,7 +7,7 @@ //! Shape X → along the linetype direction; Shape Y → perpendicular in XZ. use crate::entities::text_support::resolve_dxf_special_chars; -use crate::linetypes::{ComplexLt, LtSegment}; +use crate::io::linetypes::{ComplexLt, LtSegment}; use crate::scene::text::lff; use crate::scene::model::wire_model::WireModel;