Skip to content

andrewsonin/gset

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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
    }
}