Cargo

Value Structs derive macros for Rust to support the newtype pattern

Motivation

A very simple derive macros to support strong type system and the newtype pattern. Newtypes are a zero-cost abstraction: they introduce a new, distinct name for an existing type, with no runtime overhead when converting between the two types. This is a similar approach to Haskell's newtype keyword.

For example: ```rust

[derive(ValueStruct)]

struct UserId(String);

let uid : UserId = "my-uid".into(); ```

Macros overview

ValueStruct generates for you: - std::convert::From<> instances automatically to help you to create your structs. - ValueStruct::value() function implementation to access your field directly without using .0.

There are different behaviour for different field types: - For std::string::String it generates From<String>, From<&String>, From<&str>

Usage

Add this to your Cargo.toml:

toml [dependencies] rvstruct = "0.3"

```rust // Import it use rvstruct::ValueStruct;

// And use it on your structs

[derive(ValueStruct)]

struct UserId(String);

```

Licence

Apache Software License (ASL)

Author

Abdulla Abdurakhmanov