chara_card 0.2.0

A library to deal with character card formats and `.charx` in Rust.
Documentation
# `chara_card`   [![Version]][crates.io] [![License]][crates.io]

[Version]: https://img.shields.io/crates/v/chara_card.svg
[License]: https://img.shields.io/crates/l/chara_card.svg
[crates.io]: https://crates.io/crates/chara_card

`chara_card` provides thick (not yet...) abstraction layer on
character card formats and `.charx` in Rust.

Its primary goal is to help programs to run
the **same format everywhere with same behaviour**.

## Features

**(De)serialization/Validation**:

- [x] Full Standard Compliance
  - [Character Card v1/v2 spec.]https://github.com/malfoyslastname/character-card-spec-v2
  - [Character Card v3 spec.]https://github.com/kwaroran/character-card-spec-v3
- [x] Content parsing
  - [x] Decorator parser
  - [x] Curly Braced Syntaxes (CBS) parser
- [x] Non-standard field compatibility
  - [x] RisuAI (*testing...*)

**Evaluation**:

- [ ] Content evaluation
  - [ ] Decorator evaluator
  - [ ] CBS evaluator
- [ ] Non-standard extension compatibility
  - [ ] RisuAI

**Packaging**:

- [x] Extracting from `.charx`
- [ ] Packaging to `.charx`

## Usage

Add `chara_card` to your dependencies in `Cargo.toml`.

**Parse `card.json`**:

```rust
use chara_card::raw::CharacterCard;

fn parse_card_json(card_json: &str) {
    // Parse character card from JSON string
    let parsed: CharacterCard = serde_json::from_str(card_json).unwrap();
    
    println!("{:#?}", parsed);
}
```

**Extract from `.charx`**:

> [!WARNING]
> Currently, `charx` module is unstable and API may be changed in future.

```rust
use chara_card::charx::CharX;

fn parse_charx(bytes: &[u8]) {
    // Extract from archived bytes (.charx)
    let reader = Cursor::new(bytes);
    let _charx = CharX::from(reader).unwrap();
}
```

## License

Licensed under [Apache License, Version 2.0](LICENSE).