Code Monkey home page Code Monkey logo

gset's Introduction

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.