refactory_string 0.1.1

A library to modify a string using original indices. Useful for Source Code transformations.
Documentation
# RefactoryString
A library to modify a string using original indices, inspired  by Rich Harris' MagicString (see [here](https://github.com/Rich-Harris/magic-string)).

Suppose you have some source code and you want to modify it. If the source code that
you're using doesn't have a lossless AST parser _and_ writer, you won't be able to
parse it, update it, then save it back. This is where RefactoryString comes in handy; it
allows you to modify a text content using its original indices. It is also very fast.

For example, you may want to replace the variable name `i` in the following code:

```
let i = 1;
println!("{}", i + 5);
```

One struggle is to do the transformation in order, and you need to reparse the AST
everytime you add something new. With `RefactoryString` you don't need to worry
about it; just `overwrite`, append or prepend to the left or right of indices in
the original string, and serialize to string;

```rust
fn do_it() -> Result<(), refactory_string::Error> {
    let example = String::from(r#"let i = 1;\nprintln!("{}", i + 5);"#);
    let mut rs = RefactoryString::new(&example);

    rs.overwrite(4,5,"new_var_name")?;
    rs.overwrite(27,28,"new_var_name")?;

    assert_eq!(&rs.to_string()?, r#"let new_var_name = 1;\nprintln!("{}", new_var_name + 5);"#);
    Ok(())
}
```

## Documentation


## RefactoryBuffer
The `RefactoryString` type deals with strings, but this crate also export a type
that can deal with binary data; `RefactoryBuffer`. This is the same structure but
replaces `to_string()` with `to_bytes()`, which returns a `Vec<u8>`.

# TODO
See our issue list [here]().