# g-win [![Crates.io](https://img.shields.io/crates/v/g-win.svg)](https://crates.io/crates/g-win) [![Documentation](https://docs.rs/g-win/badge.svg)](https://docs.rs/g-win) [![License](https://img.shields.io/crates/l/g-win.svg)](https://github.com/mj10021/g-win/blob/main/LICENSE) **`g-win`** is a G-code parsing crate for Rust, built with [`winnow`](https://crates.io/crates/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](#design) - [Installation](#installation) - [Usage](#usage) - [License](#license) - [Contribution](#contribution) ## 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`: ```toml [dependencies] g-win = "0.1.0" ``` Then, run: ```bash 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`. ```rust 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 * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE)) * MIT license ([LICENSE-MIT](LICENSE-MIT)) 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.