#struct #nullable #getter #field #getter-setter #generate #create

macro nullable_struct

A derive macro that makes it easy to create nullable versions of structs

1 unstable release

0.1.0 Sep 4, 2023

#2241 in Procedural macros

Apache-2.0

9KB
90 lines

Nullable Struct

github crates.io docs.rs

Introduction

nullable_structs is a Rust crate that provides a Nullable derive macro. This macro makes it incredibly easy to create structs where each field is wrapped in Option, enabling each field to be nullable. In addition, the crate generates convenient getter and setter methods for working with these fields.

[dependencies]
nullable_struct = "0.1.0"

Features

  • Wraps each field of a struct in an Option.
  • Generates getter methods that return either the wrapped value or a default value.
  • Generates getter methods that return Option<&T>.
  • Generates setter methods for updating the value of each field.
  • Provides a constructor to initialize each field with None.
  • Implements the Default trait, initializing all fields to None.

Example

Here is a basic example demonstrating how to use nullable_struct.

extern crate nullable_structs;
use nullable_struct::Nullable;

#[derive(Nullable)]
struct MyStruct {
    field1: i32,
    field2: String,
}

fn main() {
    let mut instance = NullableMyStruct::new(42, "Hello".to_string());
    println!("Field1: {}", instance.field1());  // Output: 42
    println!("Field2: {}", instance.field2());  // Output: Hello

    instance.set_field1(13);
    instance.set_field2("World".to_string());

    if let Some(value) = instance.get_field1() {
        println!("Field1 exists: {}", value); // Output: 13
    }

    if let Some(value) = instance.get_field2() {
        println!("Field2 exists: {}", value); // Output: World
    }
}

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Dependencies

~1.5MB
~36K SLoC