Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/skanehira/type-utilities-rs
Type utilities in Rust
https://github.com/skanehira/type-utilities-rs
rust
Last synced: 14 days ago
JSON representation
Type utilities in Rust
- Host: GitHub
- URL: https://github.com/skanehira/type-utilities-rs
- Owner: skanehira
- License: mit
- Created: 2024-01-25T16:59:06.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-08-10T04:05:46.000Z (3 months ago)
- Last Synced: 2024-08-11T04:45:15.201Z (3 months ago)
- Topics: rust
- Language: Rust
- Homepage:
- Size: 31.3 KB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# type-utilities-rs
Type utilities in Rust.## Omit
Create new Struct that omit the specified fields
```rust
use type_utilities_rs::omit;// Create a new struct `NewS` with omitted field `b`
#[omit(NewS, [b])]
struct S {
a: i32,
b: &str,
}
// `NewS` will only have field `a`
let _ = NewS { a: 1 };
```When the fields dosn't specified, it will be same as the original struct
```rust
use type_utilities_rs::omit;#[omit(NewS)]
struct S<'a> {
a: i32,
b: &'a str,
}
// `NewS` is same as the original struct `S`
let _ = NewS { a: 1, b: "hello" };
```## Pick
Create new struct that pick the specified fields```rust
use type_utilities_rs::pick;// Create a new struct `NewS` with picked field `b`
#[pick(NewS, [b])]
struct S<'a> {
a: i32,
b: &'a str,
c: f64,
}// `NewS` will only have field `b`
let _ = NewS { b: "hello" };
```When the fields dosn't specified, it will be empty struct
```rust
use type_utilities_rs::pick;#[pick(NewS)]
struct S {
a: i32,
b: f64,
}// `NewS` will be empty struct
let _ = NewS {};
```## Partial
Change all fields to `Option` type
```rust
use type_utilities_rs::partial;// Create a new struct `NewS` with all fields optional
#[partial(NewS)]
struct S<'a> {
a: i32,
b: &'a str,
c: f64,
}// `NewS` will have all fields optional
let _ = NewS { a: Some(1), b: Some("hello"), c: Some(1.5) };
```When the field is already is `Option`, it's no effect
```rust
use type_utilities_rs::partial;#[partial(NewS)]
struct S {
a: i32,
b: Option,
}let _ = NewS { a: Some(1), b: Some(1.1) };
```## Required
Unwrap all fields from `Option` type
```rs
use type_utilities_rs::required;// Create a new struct `NewS` with all fields optional
#[required(NewS)]
struct S<'a> {
a: Option,
b: Option<&'a str>,
c: f64,
}// `NewS` will have all fields.
// When the field is not [`Option`], it's no effect
let _ = NewS { a: 1, b: "hello", c: 1.5 };
```