Crate g_win

Source
Expand description

§g-win

Crates.io

Documentation

License

g-win is a G-code parsing crate for Rust, built with winnow. It aims to maximize compatibility by preserving unrecognized commands for later processing, ensuring compatibility across environments and handling of features like macros and templating.

§Table of Contents

§Design

  • Preserves Unrecognized Commands: Stores any unrecognized or custom commands as strings in place.

  • Custom Command Handling: Easily add rules to parse any command.

  • Lightweight: Minimal API designed to streamline implementation.

§Installation

Add g-win to your Cargo.toml:


[dependencies]

g-win = "0.1.0"

Then, run:


cargo build

§Usage

§Parsing G-code

All G-code file information is stored in the GCodeModel struct. The parser is implemented through the FromStr trait, returning a result of the type Result<GCodeModel, GCodeParseError>.


use  g_win::GCodeModel;

let  gcode = "
	G21 ; Set units to millimeters
	G90 ; Absolute positioning
	M107 ; Fan Off
	G28 ; Home
	G1 Z15.0 F9000 ; Move Z Axis up
	MCustomCommand ; This is a custom command
	";
	
let  gcode: GCodeModel = gcode.parse().expect("failed to parse");
println!("{:?}", gcode);

§Handling Unrecognized Commands

g-win stores unrecognized or custom commands as Command::Raw(String), preserving their original content.

§License

Licensed under either of

at your option.

§Contribution

Contributions are welcome! Please submit a pull request or open an issue for suggestions and improvements.

  1. Fork the repository.

  2. Create a new branch: git checkout -b feature/your-feature-name.

  3. Commit your changes: git commit 'Add some feature'.

  4. Push to the branch: git push origin feature/your-feature-name.

  5. Open a pull request.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Modules§

emit

Structs§

Counter
G1
Struct to store G1 params as optional strings
GCodeLine
Struct to store a single line of gcode, with an id, command, and comments
GCodeModel
Struct to store all information for a .gcode file, specifically calling out relative vs absolute positioning and extrusion and with a counter to generate line ids
Id

Enums§

Command
Enum to represent all possible gcode commands that we would like to handle, leaving any unknown commands as raw strings. Specific structs to store information for each command can be added as needed.
Tag
Default basic annotations for G1 moves, generated automatically