Splitter

API Crate

A string and slice splitter library

String Example

```rust use splitter::StrSplitter;

let sp = StrSplitter::new("bytes example", " "); assert_eq!( sp.collect::>(), vec!["bytes", " ", "example"], ); ```

Slice Example

```rust use splitter::Splitter;

let sp = Splitter::new(&[1, 2, 3, 3, 4], [[2], [4]]); let re: Vec<&[usize]> = vec![&[1], &[2], &[3, 3], &[4]]; assert_eq!(sp.collect::>(), re); ```

Custom Info

```rust use std::ops::Range; use splitter::{StrInfo, StrSplitter};

[derive(Default)]

struct CustomCtx { cursor: usize, }

[derive(Debug, PartialEq)]

struct Custom<'a> { content: &'a str, span: Range, }

impl<'a> StrInfo<'a> for Custom<'a> { type Context = CustomCtx; fn generate(ctx: &mut Self::Context, ts: &'a str) -> Self { let start = ctx.cursor; ctx.cursor += ts.len(); Custom { content: ts, span: start..ctx.cursor } } }

let sp = StrSplitter::new("bytes example", " ").withinfo::(); asserteq!( sp.collect::>(), vec![ Custom { content: "bytes", span: 0..5 }, Custom { content: " ", span: 5..6 }, Custom { content: "example", span: 6..13 }, ], ); ```

Derive Example (derive and impls - feature)

```rust use std::ops::Range; use splitter::{StrInfo, StrSplitter};

[derive(Debug, PartialEq, StrInfo)]

struct Custom<'a> { content: &'a str, span: Range, }

let sp = StrSplitter::new("bytes example", " ").withinfo::(); asserteq!( sp.collect::>(), vec![ Custom { content: "bytes", span: 0..5 }, Custom { content: " ", span: 5..6 }, Custom { content: "example", span: 6..13 }, ], ); ```

Derive Info

When using the derive macro, and lifetimes are provided, the first lifetime has to be the lifetime of the slice or of the string.

Same with generic type parameters, the first generic type parameter has to be the the type of the slice elements.

Features

Automatic Implementations

impls - feature

impls and std - feature