Getters and Setters for Rust.
Provides a procedural macro capable of deriving basic getters and setters for structs.
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>,
);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 isprivateby default.
And some of them have the following named parameter:
ty— return type of the method being inferred. Must be a valid Rust type.
Here and further we will adhere to the following notation.
field— field name.T— field type.
The field attributes currently supported are listed below.
Derives a reference getter for a field.
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&Treturn type.
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
}
}Derives a mutable getter for a field.
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 Treturn type.
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
}
}Derives a copy getter for a field.
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 theTreturn type.
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
}
}Derives a reference getter for a field, which applies the deref operation to the resulting reference.
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>::Targetreturn type.
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
}
}Derives a mutable getter for a field, which applies the deref_mut operation to the resulting reference.
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>::Targetreturn type.
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
}
}Derives a copy getter for a field, which applies dereferencing to the field value.
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>::Targetreturn type.
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
}
}Derives a reference getter for a field, which applies the as_ref operation to the resulting reference.
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.
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()
}
}Derives a reference getter for a field, which applies the as_deref operation to the resulting reference.
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.
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()
}
}Derives a mutable getter for a field, which applies the as_deref_mut operation to the resulting reference.
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.
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()
}
}Derives a setter for a field.
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.
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
}
}Derives a borrowing setter for a field.
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.
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
}
}Derives an owning setter for a field.
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.
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
}
}