Crate gset

source ·
Expand description

§gset

Getters and Setters for Rust.

Crates.io Documentation MIT licensed Build Status

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 is private 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 as field.
  • 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 as field_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 as field.
  • 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_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 as field.
  • 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 as field_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 as field.
  • 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 as field.
  • 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 as field.
  • 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 as field_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 as set_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 as set_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 as set_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
    }
}

Derive Macros§

  • Derives getters and setters.