# `shori`
[](https://crates.io/crates/shori)
[](https://docs.rs/shori)
[](https://github.com/pas2rust/shori/blob/main/LICENSE)
**`shori`** is a flexible data transformation and parsing toolkit for Rust.
It provides the `#[derive(Parser)]` macro, which automatically implements conversions for your structs—supporting formats like JSON, TOML, bincode, and common smart pointers and containers like `Arc`, `Mutex`, and `Box`.
Designed for ergonomic and type-safe data manipulation.
---
## 🔧 Features
### ✨ Auto-Derived Parsing & Conversions
- `#[derive(Parser)]` implements:
- `.parse().json()`
- `.toml()`
- `.bin()`
- `.map()`
- `.from()`, `.from_value()`
- Supports conversion from and to:
- `String`, `Vec<u8>`, `serde_json::Value`, `toml::Value`, `HashMap<String, Value>`
- Wrappers: `Box`, `Arc`, `Mutex`, `RefCell`, `OnceCell`, `UnsafeCell`, `tokio::sync::Mutex`, `Vec<T>`
---
## 📦 Installation
```bash
cargo add shori
```
## 🚀 Usage
Basic Example
```rust
use kenzu::Builder;
use serde::{Deserialize, Serialize};
use shori::Parser;
#[derive(
Builder,
Default,
Debug,
Clone,
PartialEq,
Serialize,
Deserialize,
bincode::Encode,
bincode::Decode,
Parser,
)]
pub struct User {
pub id: String,
#[set(value = "name")]
pub name: String,
pub password: String,
#[set(value = "email@example.com")]
pub email: String,
#[set(value = 18)]
pub age: u8,
pub gender: String,
}
fn parse_toml() {
let user_parse = User::new()
.id("123e4567-e89b-12d3-a456-426614174000")
.name("John Doe")
.password("123")
.email("john@example.com")
.age(25)
.gender("M")
.build()
.unwrap()
.parse()
.toml()
.unwrap();
let toml_val = user_parse.get();
let recovered = user_parse.from_value(&toml_val).unwrap();
assert_eq!(recovered.name, "John Doe");
let from = user_parse.from().unwrap();
assert_eq!(from.email, "john@example.com");
}
fn parse_box() {
let user = User::new()
.id("123e4567-e89b-12d3-a456-426614174000")
.name("John Doe")
.password("password123")
.email("johndoe@example.com")
.age(25)
.gender("F")
.build()
.unwrap()
.parse()
.boxed()
.get();
assert_eq!(user.name, "John Doe");
}
```
# ❤️ Donate
[](https://github.com/pas2rust/pas2rust/blob/main/pas-monero-donate.png)
[](https://github.com/pas2rust/pas2rust/blob/main/pas-bitcoin-donate.png)