1 unstable release
0.1.0 | Jan 26, 2020 |
---|
#9 in #shorthand
1,912 downloads per month
Used in 7 crates
(via shorthand)
5KB
72 lines
shorthand
shorthand
is defined as
a system of fast writing
and that is exactly what this library is for; to remove the annoying
boilerplate code, that comes with writing your own library.
What does this library do?
It makes coding in rust a lot more convenient, by deriving getters
and
setters
for the fields of a struct.
use shorthand::ShortHand;
#[derive(ShortHand, Default)]
pub struct Example {
number: usize,
data: String,
}
let mut example = Example::default();
assert_eq!(example.number(), 0);
example.set_number(1);
assert_eq!(example.number(), 1);
assert_eq!(example.data(), &"".to_string());
example.set_data("hi".to_string());
assert_eq!(example.data(), &"hi".to_string());
Otherwise, you would have to write the this by hand
pub struct Example {
number: usize,
data: String,
}
#[allow(dead_code)]
impl Example {
#[inline(always)]
pub fn number(&self) -> usize { self.number }
#[inline(always)]
pub fn set_number(&mut self, value: usize) -> &mut Self {
self.number = value;
self
}
#[inline(always)]
pub fn data(&self) -> &String { &self.data }
#[inline(always)]
pub fn set_data(&mut self, value: String) -> &mut Self {
self.data = value;
self
}
}
How do I get started?
Simply add this library under [dependencies]
to your Cargo.toml
[dependencies]
shorthand = "0.1"
You can then derive ShortHand
for any struct
use shorthand::ShortHand;
#[derive(ShortHand)]
struct Example {
field: usize,
}
You can find the documentation here.
Feature Requests and Bug Reports
Feel free to ask questions or report bugs here. There are no stupid questions.
This library should be as convenient as possible, so please do not hesitate to request a feature.
Reference
This library has been inspired by the following crates
getset
(just the issue tracker and which features were requested)thiserror
derive-builder
proc-macro-workshop
lib.rs
:
This crate is based on https://cprimozic.net/blog/writing-a-hashmap-to-struct-procedural-macro-in-rust/
There was sadly no crate available, so I had to make my own :(
I made some improvements to the code and ported it to a newer version of
syn
. For example the FromMap
trait doesn't need a type parameter
and the HashMap
should contain a static str (field names should be known
at compile time).
Dependencies
~1.5MB
~37K SLoC