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.jsHowever 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.
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.
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.
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
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```
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
})
```