# stringslice   [![Test status]][tests] [![Test coverage]][codecov] [![Crate version]][crates] [![Rust version]][crates] [test status]: https://img.shields.io/github/actions/workflow/status/staticintlucas/stringslice/test.yml?branch=main&label=tests&style=flat-square [test coverage]: https://img.shields.io/codecov/c/gh/staticintlucas/stringslice?style=flat-square [crate version]: https://img.shields.io/crates/v/stringslice?style=flat-square [rust version]: https://img.shields.io/badge/rust-1.30%2B-informational?style=flat-square [tests]: https://github.com/staticintlucas/stringslice/actions/workflows/test.yml [codecov]: https://app.codecov.io/gh/staticintlucas/stringslice [crates]: https://crates.io/crates/stringslice A collection of methods to slice strings based on character indices rather than bytes. This crate implements the `StringSlice` trait for `&str`, containing the `slice`, `try_slice`, `substring`, and `try_substring` methods. ## Features * Uses primitive `&str` and standard `String` types * `#[no_std]` compatible by default * Small footprint * ~50 LoC excluding blank lines, comments, and tests * No additional dependencies (only dev-dependencies) ## Usage Add `stringslice` to your `Cargo.toml` file: ```toml [dependencies] stringslice = "0.2" ``` ## Examples The `slice` method can be used to slice a `&str`. ```rust use stringslice::StringSlice; assert_eq!("Ùníc😎de".slice(4..5), "😎"); assert_eq!("世界こんにちは".slice(2..), "こんにちは"); ``` The `substring` method is provided for convenience and accepts separate parameters for the start and end of the slice. ```rust use stringslice::StringSlice; assert_eq!("Γεια σου κόσμε".substring(9, 14), "κόσμε"); ``` There are also equivalent `try_slice` and `try_substring` methods which return `None` for invalid input. ```rust use stringslice::StringSlice; assert_eq!("string".try_slice(4..2), None); ``` ## Licence Licensed under either of * Apache License, Version 2.0 ([LICENCE-APACHE](LICENCE-APACHE) or [http://www.apache.org/licenses/LICENSE-2.0][apache-licence]) * MIT license ([LICENCE-MIT](LICENCE-MIT) or [http://opensource.org/licenses/MIT][mit-licence]) at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. [apache-licence]: http://www.apache.org/licenses/LICENSE-2.0 [mit-licence]: http://opensource.org/licenses/MIT