11 releases (7 stable)
1.1.0 | Jul 23, 2024 |
---|---|
1.0.5 | May 18, 2024 |
0.1.0 | May 22, 2023 |
0.0.3 | May 9, 2023 |
0.0.2 | Jan 10, 2023 |
#1121 in Procedural macros
217 downloads per month
Used in tmdb-async
30KB
414 lines
gset
Getters and Setters for Rust.
Provides a procedural macro capable of deriving basic getters and setters for structs.
Usage example
An example of using this library is provided below.
use gset::Getset;
#[derive(Getset)]
struct Struct<T>
{
/// Field 1.
#[getset(get_copy, name = "get_field_1", vis = "pub")]
#[getset(set)]
field_1: f64,
/// Field 2.
#[getset(get_deref, vis = "pub")]
#[getset(get_deref_mut, vis = "pub")]
#[getset(set, vis = "pub")]
field_2: Vec<T>,
}
This also works well for tuple structures,
but the name
parameter becomes mandatory.
use gset::Getset;
#[derive(Getset)]
struct Struct<T>(
/// Field 1.
#[getset(get_copy, name = "get_field_1", vis = "pub")]
#[getset(set, name = "set_field_1")]
f64,
/// Field 2.
#[getset(get_deref, name = "get_field_2", vis = "pub")]
#[getset(get_deref_mut, name = "get_field_2_mut", vis = "pub")]
#[getset(set, name = "set_field_2", vis = "pub")]
Vec<T>,
);
Field attributes
All field attributes have the following named parameters:
name
— name of the method being inferred. Must be a valid Rust identifier. This is a required parameter for tuple structs.vis
— visibility of the method being inferred. Must be a valid Rust visibility modifier. Visibility isprivate
by default.
And some of them have the following named parameter:
ty
— return type of the method being inferred. Must be a valid Rust type.
Legend
Here and further we will adhere to the following notation.
field
— field name.T
— field type.
The field attributes currently supported are listed below.
1. get
Derives a reference getter for a field.
Parameters
name
— name of the resulting method. If not set, it will be named asfield
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. If not set, it will have the&T
return type.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get, vis = "pub")]
a: f64,
}
will expand into
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> &f64 {
&self.a
}
}
2. get_mut
Derives a mutable getter for a field.
Parameters
name
— name of the resulting method. If not set, it will be named asfield_mut
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. If not set, it will have the&mut T
return type.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_mut, vis = "pub")]
a: f64,
}
will expand into
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a_mut(&mut self) -> &mut f64 {
&mut self.a
}
}
3. get_copy
Derives a copy getter for a field.
Parameters
name
— name of the resulting method. If not set, it will be named asfield
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. If not set, it will have theT
return type.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_copy, vis = "pub")]
a: f64,
}
will expand into
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> f64 {
self.a
}
}
4. get_deref
Derives a reference getter for a field, which applies the deref
operation to the resulting reference.
Parameters
name
— name of the resulting method. If not set, it will be named asfield
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. If not set, it will have the&<T as ::std::ops:Deref>::Target
return type.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_deref, vis = "pub")]
a: Vec<f64>,
}
will expand into
struct Struct {
/// Doc comment.
a: Vec<f64>,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> &[f64] {
&self.a
}
}
5. get_deref_mut
Derives a mutable getter for a field, which applies the deref_mut
operation to the resulting reference.
Parameters
name
— name of the resulting method. If not set, it will be named asfield_mut
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. If not set, it will have the&mut <T as ::std::ops:Deref>::Target
return type.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_deref_mut, vis = "pub")]
a: Vec<f64>,
}
will expand into
struct Struct {
/// Doc comment.
a: Vec<f64>,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a_mut(&mut self) -> &mut [f64] {
&mut self.a
}
}
6. get_deref_copy
Derives a copy getter for a field, which applies dereferencing to the field value.
Parameters
name
— name of the resulting method. If not set, it will be named asfield
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. If not set, it will have the<T as ::std::ops:Deref>::Target
return type.
Example
use derive_more::Deref;
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_deref_copy, vis = "pub")]
a: F64,
}
#[derive(Deref)]
struct F64(f64);
will expand into
use derive_more::Deref;
struct Struct {
/// Doc comment.
a: F64,
}
#[derive(Deref)]
struct F64(f64);
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> f64 {
*self.a
}
}
7. get_as_ref
Derives a reference getter for a field, which applies the as_ref
operation to the resulting reference.
Parameters
name
— name of the resulting method. If not set, it will be named asfield
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. Required parameter.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_as_ref, vis = "pub", ty = "Option<&f64>")]
a: Option<f64>,
}
will expand into
struct Struct {
/// Doc comment.
a: Option<f64>,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> Option<&f64> {
self.a.as_ref()
}
}
8. get_as_deref
Derives a reference getter for a field, which applies the as_deref
operation to the resulting reference.
Parameters
name
— name of the resulting method. If not set, it will be named asfield
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. Required parameter.
Example
use derive_more::Deref;
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_as_deref, vis = "pub", ty = "Option<&f64>")]
a: Option<F64>,
}
#[derive(Deref)]
struct F64(f64);
will expand into
use derive_more::Deref;
struct Struct {
/// Doc comment.
a: Option<F64>,
}
#[derive(Deref)]
struct F64(f64);
impl Struct {
/// Doc comment.
#[inline]
pub fn a(&self) -> Option<&f64> {
self.a.as_deref()
}
}
9. get_as_deref_mut
Derives a mutable getter for a field, which applies the as_deref_mut
operation to the resulting reference.
Parameters
name
— name of the resulting method. If not set, it will be named asfield_mut
.vis
— visibility of the resulting method. If not set, it will be private.ty
— return type of the resulting method. Required parameter.
Example
use derive_more::{Deref, DerefMut};
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(get_as_deref_mut, vis = "pub", ty = "Option<&mut f64>")]
a: Option<F64>,
}
#[derive(Deref, DerefMut)]
struct F64(f64);
will expand into
use derive_more::{Deref, DerefMut};
struct Struct {
/// Doc comment.
a: Option<F64>,
}
#[derive(Deref, DerefMut)]
struct F64(f64);
impl Struct {
/// Doc comment.
#[inline]
pub fn a_mut(&mut self) -> Option<&mut f64> {
self.a.as_deref_mut()
}
}
10. set
Derives a setter for a field.
Parameters
name
— name of the resulting method. If not set, it will be named asset_field
.vis
— visibility of the resulting method. If not set, it will be private.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(set, vis = "pub")]
a: f64,
}
will expand into
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn set_a(&mut self, value: f64) {
self.a = value
}
}
11. set_borrow
Derives a borrowing setter for a field.
Parameters
name
— name of the resulting method. If not set, it will be named asset_field
.vis
— visibility of the resulting method. If not set, it will be private.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(set_borrow, vis = "pub")]
a: f64,
}
will expand into
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn set_a(&mut self, value: f64) -> &mut Self {
self.a = value;
self
}
}
12. set_own
Derives an owning setter for a field.
Parameters
name
— name of the resulting method. If not set, it will be named asset_field
.vis
— visibility of the resulting method. If not set, it will be private.
Example
use gset::Getset;
#[derive(Getset)]
struct Struct {
/// Doc comment.
#[getset(set_own, vis = "pub")]
a: f64,
}
will expand into
struct Struct {
/// Doc comment.
a: f64,
}
impl Struct {
/// Doc comment.
#[inline]
pub fn set_a(mut self, value: f64) -> Self {
self.a = value;
self
}
}
Dependencies
~0.5–1MB
~21K SLoC