View Source StructHelpers (Struct Helpers v0.1.3)

This module provides macros that create structs with type-safe helper functions that would be found in OOP languages such as a constructor and getters / setters for each field. If a typing criteria is not followed then an exception is raised.

Installation:

Add to your mix.exs

  [
    {:struct_helpers, "~> 0.1.3"}
  ]

Setup:

defmodule MyModule do
  use StructHelpers

  generate_constructor(__MODULE__, %{
    field: :year,
    type_guard: :is_integer,
    default_value: 2,
    nullable: false,
    struct: nil
  },
  %{
    field: :age,
    type_guard: :is_integer,
    default_value: 10,
    nullable: true,
    struct: nil
  },
  %{
    field: :hair_details,
    type_guard: :is_struct,
    default_value: nil,
    nullable: true,
    struct: Hair
  })

end

Usage / Application:

MyModule.constructor(
  year: 10,
  age: 20,
  hair: Hair.constructor(
    color: "brown",
    type: "wavy"
  )
)

Result:


Supports up to 30 attributes. If more than 30 attributes are needed you may use the generator script file (JavaScript) provided here:

https://github.com/otboss/struct_helpers/blob/master/lib/generator.js

However if a struct has greater than 30 attributes chances are that it may need to be broken down to abide by the SOLID principles.

Summary

Functions

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Generates a struct, complete with a constructor, getter and setter methods.

Functions

Link to this macro

generate_constructor(module, field_1)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23, field_24)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23, field_24, field_25)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23, field_24, field_25, field_26)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23, field_24, field_25, field_26, field_27)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23, field_24, field_25, field_26, field_27, field_28)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23, field_24, field_25, field_26, field_27, field_28, field_29)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```
Link to this macro

generate_constructor(module, field_1, field_2, field_3, field_4, field_5, field_6, field_7, field_8, field_9, field_10, field_11, field_12, field_13, field_14, field_15, field_16, field_17, field_18, field_19, field_20, field_21, field_22, field_23, field_24, field_25, field_26, field_27, field_28, field_29, field_30)

View Source (macro)

Generates a struct, complete with a constructor, getter and setter methods.

Macro usage example:

```
generate_constructor(__MODULE__, %{
  field: :year,
  type_guard: :is_integer,
  default_value: 2,
  nullable: false,
  struct: nil
},
%{
  field: :age,
  type_guard: :is_integer,
  default_value: 10,
  nullable: false,
  struct: nil
},
%{
  field: :hair_details,
  type_guard: :is_struct,
  default_value: %Hair{},
  nullable: true,
  struct: Hair
})
```