# EvolvingString Library

The EvolvingString library is a Rust crate that provides functionalities for creating and managing evolving strings, where the evolution of the string is determined by a SHA256 hash function based on an initial string, a secret, and a time interval.

## Features

- Create an instance of EvolvingString with an initial string, secret, and an interval for evolution.
- Calculate the current state of the string based on the elapsed time since the instance was created.
- Predict the state of the string after a specific amount of time has passed.
- Serialize and deserialize EvolvingString instances to and from a base64 representation.

## Usage

To use the EvolvingString library in your Rust project, add the following to your `Cargo.toml` file under `[dependencies]`:

```toml
evolvingstring = "0.1.0"
```

You can then create an EvolvingString instance and use its methods as follows:

```rust
use evolvingstring::EvolvingString;

let es = EvolvingString::new("initial value", "secret key", 60);
let current_state = es.current();
let predicted_state = es.predict(120);
let b64_encoded = es.to_base64();
let es_from_b64 = EvolvingString::from_base64(&b64_encoded).unwrap();
```

Replace "initial value" and "secret key" with your own initial string and secret, and choose an appropriate interval in seconds for the evolution of the string.

## Testing

The library comes with an extensive suite of tests to ensure the correctness of the implemented features. You can run the tests using the `cargo test` command.

## Author

EvolvingString is maintained by Jesse McPherson (<jesse@mcfearsome.dev>). For any questions or contributions, please contact the author directly.

## License

This project is licensed under the MIT License - see the LICENSE file for details.
