Skip to content

Latest commit

 

History

History
480 lines (382 loc) · 9.95 KB

README.md

File metadata and controls

480 lines (382 loc) · 9.95 KB

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