From 812cf58d7da5aa7129055f83675050893fab497a Mon Sep 17 00:00:00 2001 From: Sameer Puri Date: Sun, 22 Feb 2026 11:45:33 -0800 Subject: [PATCH] Update to 2024 edition --- Cargo.toml | 2 +- cli/src/main.rs | 15 ++++++++++----- lib/src/arc.rs | 2 +- lib/src/converter/length_serde.rs | 2 +- lib/src/converter/mod.rs | 2 +- lib/src/converter/path.rs | 2 +- lib/src/converter/transform.rs | 2 +- lib/src/converter/visit.rs | 4 ++-- lib/src/lib.rs | 2 +- lib/src/turtle/dpi.rs | 2 +- lib/src/turtle/mod.rs | 5 +++-- web/src/forms/editors.rs | 2 +- web/src/forms/mod.rs | 4 ++-- web/src/main.rs | 8 ++++---- web/src/ui/mod.rs | 10 +++++----- web/src/util.rs | 2 +- 16 files changed, 36 insertions(+), 30 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4e6bab0..e691799 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ resolver = "2" [workspace.package] authors = ["Sameer Puri "] -edition = "2021" +edition = "2024" repository = "https://github.com/sameer/svg2gcode" license = "MIT" diff --git a/cli/src/main.rs b/cli/src/main.rs index 3e36205..4601571 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,6 +1,6 @@ use clap::Parser; use g_code::{ - emit::{format_gcode_io, FormatOptions}, + emit::{FormatOptions, format_gcode_io}, parse::snippet_parser, }; use log::{error, info}; @@ -14,7 +14,7 @@ use std::{ use svgtypes::LengthListParser; use svg2gcode::{ - svg2program, ConversionOptions, Machine, Settings, SupportedFunctionality, Version, + ConversionOptions, Machine, Settings, SupportedFunctionality, Version, svg2program, }; #[derive(Debug, Parser)] @@ -95,7 +95,8 @@ struct Opt { fn main() -> io::Result<()> { if env::var("RUST_LOG").is_err() { - env::set_var("RUST_LOG", "svg2gcode=info") + // SAFETY: calling in a single-threaded context + unsafe { env::set_var("RUST_LOG", "svg2gcode=info") } } env_logger::init(); @@ -266,8 +267,12 @@ fn main() -> io::Result<()> { .transpose(), ]; - let machine = if let [Ok(tool_on_action), Ok(tool_off_action), Ok(program_begin_sequence), Ok(program_end_sequence)] = - snippets + let machine = if let [ + Ok(tool_on_action), + Ok(tool_off_action), + Ok(program_begin_sequence), + Ok(program_end_sequence), + ] = snippets { Machine::new( settings.machine.supported_functionality, diff --git a/lib/src/arc.rs b/lib/src/arc.rs index 888151b..05ac506 100644 --- a/lib/src/arc.rs +++ b/lib/src/arc.rs @@ -278,7 +278,7 @@ impl Transformed for SvgArc { #[cfg(test)] mod tests { use cairo::{Context, SvgSurface}; - use lyon_geom::{point, vector, CubicBezierSegment, Point, Vector}; + use lyon_geom::{CubicBezierSegment, Point, Vector, point, vector}; use std::path::PathBuf; use svgtypes::PathParser; diff --git a/lib/src/converter/length_serde.rs b/lib/src/converter/length_serde.rs index 50ab952..e2518bb 100644 --- a/lib/src/converter/length_serde.rs +++ b/lib/src/converter/length_serde.rs @@ -2,9 +2,9 @@ //! used for [super::ConversionOptions::dimensions] use serde::{ + Deserialize, Deserializer, Serialize, Serializer, de::{SeqAccess, Visitor}, ser::SerializeSeq, - Deserialize, Deserializer, Serialize, Serializer, }; use svgtypes::{Length, LengthUnit}; diff --git a/lib/src/converter/mod.rs b/lib/src/converter/mod.rs index 54e96e9..e48f97b 100644 --- a/lib/src/converter/mod.rs +++ b/lib/src/converter/mod.rs @@ -10,7 +10,7 @@ use uom::si::f64::Length as UomLength; use uom::si::length::{inch, millimeter}; use self::units::CSS_DEFAULT_DPI; -use crate::{turtle::*, Machine}; +use crate::{Machine, turtle::*}; #[cfg(feature = "serde")] mod length_serde; diff --git a/lib/src/converter/path.rs b/lib/src/converter/path.rs index 5a78bd5..d7f0349 100644 --- a/lib/src/converter/path.rs +++ b/lib/src/converter/path.rs @@ -1,6 +1,6 @@ use euclid::Angle; use log::debug; -use lyon_geom::{point, vector, ArcFlags}; +use lyon_geom::{ArcFlags, point, vector}; use svgtypes::PathSegment; use crate::Turtle; diff --git a/lib/src/converter/transform.rs b/lib/src/converter/transform.rs index 238a65c..c4ba1da 100644 --- a/lib/src/converter/transform.rs +++ b/lib/src/converter/transform.rs @@ -1,6 +1,6 @@ use euclid::{ - default::{Transform2D, Transform3D}, Angle, + default::{Transform2D, Transform3D}, }; use lyon_geom::vector; use svgtypes::{Align, AspectRatio, TransformListToken, ViewBox}; diff --git a/lib/src/converter/visit.rs b/lib/src/converter/visit.rs index 7fd22b2..443e392 100644 --- a/lib/src/converter/visit.rs +++ b/lib/src/converter/visit.rs @@ -6,12 +6,12 @@ use roxmltree::{Document, Node}; use svgtypes::{AspectRatio, PathParser, PathSegment, PointsParser, TransformListParser, ViewBox}; use super::{ + ConversionVisitor, path::apply_path, transform::{get_viewport_transform, svg_transform_into_euclid_transform}, units::DimensionHint, - ConversionVisitor, }; -use crate::{converter::node_name, Turtle}; +use crate::{Turtle, converter::node_name}; const SVG_TAG_NAME: &str = "svg"; const CLIP_PATH_TAG_NAME: &str = "clipPath"; diff --git a/lib/src/lib.rs b/lib/src/lib.rs index f82daf0..0003c59 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -11,7 +11,7 @@ mod postprocess; /// This concept is referred to as [Turtle graphics](https://en.wikipedia.org/wiki/Turtle_graphics). mod turtle; -pub use converter::{svg2program, ConversionConfig, ConversionOptions}; +pub use converter::{ConversionConfig, ConversionOptions, svg2program}; pub use machine::{Machine, MachineConfig, SupportedFunctionality}; pub use postprocess::PostprocessConfig; pub use turtle::Turtle; diff --git a/lib/src/turtle/dpi.rs b/lib/src/turtle/dpi.rs index 40ed392..059db02 100644 --- a/lib/src/turtle/dpi.rs +++ b/lib/src/turtle/dpi.rs @@ -1,6 +1,6 @@ use std::fmt::Debug; -use lyon_geom::{point, vector, CubicBezierSegment, Point, QuadraticBezierSegment, SvgArc, Vector}; +use lyon_geom::{CubicBezierSegment, Point, QuadraticBezierSegment, SvgArc, Vector, point, vector}; use uom::si::{ f64::Length, length::{inch, millimeter}, diff --git a/lib/src/turtle/mod.rs b/lib/src/turtle/mod.rs index 8b6fb03..bd4d0a1 100644 --- a/lib/src/turtle/mod.rs +++ b/lib/src/turtle/mod.rs @@ -1,8 +1,9 @@ use std::fmt::Debug; use lyon_geom::{ - euclid::{default::Transform2D, Angle}, - point, vector, ArcFlags, CubicBezierSegment, Point, QuadraticBezierSegment, SvgArc, Vector, + ArcFlags, CubicBezierSegment, Point, QuadraticBezierSegment, SvgArc, Vector, + euclid::{Angle, default::Transform2D}, + point, vector, }; use crate::arc::Transformed; diff --git a/web/src/forms/editors.rs b/web/src/forms/editors.rs index df85c8f..d754538 100644 --- a/web/src/forms/editors.rs +++ b/web/src/forms/editors.rs @@ -1,4 +1,4 @@ -use codespan_reporting::term::{emit, termcolor::NoColor, Config}; +use codespan_reporting::term::{Config, emit, termcolor::NoColor}; use g_code::parse::{into_diagnostic, snippet_parser}; use gloo_timers::callback::Timeout; use paste::paste; diff --git a/web/src/forms/mod.rs b/web/src/forms/mod.rs index 7c1b6b1..2f9b88c 100644 --- a/web/src/forms/mod.rs +++ b/web/src/forms/mod.rs @@ -1,5 +1,5 @@ use gloo_file::{ - callbacks::{read_as_bytes, FileReader}, + callbacks::{FileReader, read_as_bytes}, futures::read_as_text, }; use js_sys::TypeError; @@ -8,7 +8,7 @@ use std::{convert::TryInto, path::Path}; use svg2gcode::{Settings, Version}; use wasm_bindgen::JsCast; use wasm_bindgen_futures::JsFuture; -use web_sys::{window, Event, FileList, HtmlElement, HtmlInputElement, Response}; +use web_sys::{Event, FileList, HtmlElement, HtmlInputElement, Response, window}; use yew::prelude::*; use yewdux::{functional::use_store, use_dispatch}; diff --git a/web/src/main.rs b/web/src/main.rs index 62b1610..d85fe82 100644 --- a/web/src/main.rs +++ b/web/src/main.rs @@ -5,13 +5,13 @@ use std::{ use base64::Engine; use g_code::{ - emit::{format_gcode_fmt, format_gcode_io, FormatOptions}, + emit::{FormatOptions, format_gcode_fmt, format_gcode_io}, parse::snippet_parser, }; use js_sys::Date; use log::Level; use roxmltree::{Document, ParsingOptions}; -use svg2gcode::{svg2program, ConversionOptions, Machine}; +use svg2gcode::{ConversionOptions, Machine, svg2program}; use yew::prelude::*; mod forms; @@ -23,8 +23,8 @@ use forms::*; use state::*; use ui::*; use util::*; -use yewdux::{prelude::use_store, use_dispatch, YewduxRoot}; -use zip::{write::FileOptions, CompressionMethod, ZipWriter}; +use yewdux::{YewduxRoot, prelude::use_store, use_dispatch}; +use zip::{CompressionMethod, ZipWriter, write::FileOptions}; #[function_component(App)] fn app() -> Html { diff --git a/web/src/ui/mod.rs b/web/src/ui/mod.rs index df7f851..3f34f34 100644 --- a/web/src/ui/mod.rs +++ b/web/src/ui/mod.rs @@ -1,9 +1,9 @@ use std::fmt::Display; use web_sys::{Event, FileList, HtmlInputElement, InputEvent, InputEventInit, MouseEvent}; use yew::{ - classes, function_component, html, use_force_update, use_node_ref, use_state, + AttrValue, Callback, Children, Html, NodeRef, Properties, TargetCast, ToHtml, classes, + function_component, html, use_force_update, use_node_ref, use_state, virtual_dom::{VChild, VNode}, - AttrValue, Callback, Children, Html, NodeRef, Properties, TargetCast, ToHtml, }; macro_rules! css_class_enum { @@ -151,7 +151,7 @@ where { props.button.clone().map(Html::from).unwrap_or_default() } { - if let Some(Err(ref err)) = props.parsed.as_ref() { + if let Some(Err(err)) = props.parsed.as_ref() { html!{
{ err.to_string() }
} } else if let Some(desc) = props.desc { html! {

{ desc }

} @@ -249,7 +249,7 @@ where { props.button.clone().map(Html::from).unwrap_or_default() } { - if let Some(Err(ref err)) = props.parsed.as_ref() { + if let Some(Err(err)) = props.parsed.as_ref() { html!{
{ err }
} } else if let Some(desc) = props.desc { html! {

{ desc }

} @@ -433,7 +433,7 @@ where } { - if let Some(Err(ref err)) = props.parsed.as_ref() { + if let Some(Err(err)) = props.parsed.as_ref() { html!{
{ err }
} } else if let Some(desc) = props.desc { html! {

{ desc }

} diff --git a/web/src/util.rs b/web/src/util.rs index 85b1c77..8313c2d 100644 --- a/web/src/util.rs +++ b/web/src/util.rs @@ -1,7 +1,7 @@ use base64::Engine; use std::path::Path; use wasm_bindgen::JsCast; -use web_sys::{window, HtmlElement}; +use web_sys::{HtmlElement, window}; pub fn prompt_download(path: impl AsRef, content: impl AsRef<[u8]>) { let window = window().unwrap();