parse_rust 0.1.0

A Rust implementation of Python's parse library for string parsing and pattern matching
Documentation
# parse_rust

A Rust implementation of Python's `parse` library, providing a flexible way to parse strings using simple, human-readable format strings.

## Features

- Parse strings using format strings similar to Python's `str.format()`
- Extract typed values from strings
- Support for various data types:
  - Integers
  - Floats
  - Words (strings)
  - Custom types
  - Date and Time formats

## Date and Time Format Specifiers

The library supports various datetime format specifiers:

- `:tg` - Generic date/time format
  ```
  27/12/2024 19:57:55
  27/12/2024 07:57:55 PM
  2024/12/27 19:57:55
  27/12/2024
  19:57:55
  ```

- `:ta` - American date/time format
  ```
  12/27/2024 07:57:55 PM
  12/27/2024 19:57:55
  12/27/2024
  ```

- `:te` - Email date/time format (RFC 2822)
  ```
  Fri, 27 Dec 2024 19:57:55 +0000
  27 Dec 2024 19:57:55 +0000
  27 Dec 2024
  ```

- `:th` - HTTP log date/time format
  ```
  27/Dec/2024:19:57:55 +0000
  ```

- `:ts` - System log date/time format
  ```
  Dec 27 2024 19:57:55
  ```

- `:ti` - ISO 8601 date/time format
  ```
  2024-12-27T19:57:55.000+00:00
  2024-12-27T19:57:55+00:00
  2024-12-27T19:57:55.000
  2024-12-27T19:57:55
  2024-12-27
  ```

## Usage

```rust
use parse_rust::Parser;

// Parse a simple string with an integer
let p = Parser::new("Value is {:d}", true).unwrap();
let result = p.parse("Value is 42").unwrap();
let value: &i64 = result.get(0).unwrap();
assert_eq!(*value, 42);

// Parse a datetime string
let p = Parser::new("Time: {:tg}", true).unwrap();
let result = p.parse("Time: 27/12/2024 19:57:55").unwrap();
let dt: &chrono::NaiveDateTime = result.get(0).unwrap();
assert_eq!(dt.format("%Y-%m-%d %H:%M:%S").to_string(), "2024-12-27 19:57:55");

// Parse with named fields
let p = Parser::new("Name: {name:w}, Age: {age:d}", true).unwrap();
let result = p.parse("Name: John, Age: 30").unwrap();
let name: &str = result.named("name").unwrap();
let age: &i64 = result.named("age").unwrap();
assert_eq!(name, "John");
assert_eq!(*age, 30);
```

## Installation

Add this to your `Cargo.toml`:

```toml
[dependencies]
parse_rust = "0.1.0"
```

## Dependencies

- `regex` - For pattern matching
- `chrono` - For date and time parsing
- `thiserror` - For error handling
- `lazy_static` - For static initialization

## License

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