# Call @enumx macro with NamedTuple constant as input

**URL:** https://discourse.julialang.org/t/call-enumx-macro-with-namedtuple-constant-as-input/80699
**Category:** General Usage
**Tags:** metaprogramming, namedtuple, enum
**Created:** [May 8, 2022, 8:50am UTC](https://discourse.julialang.org/t/call-enumx-macro-with-namedtuple-constant-as-input/80699 "2022-05-08T08:50:30Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![FireCrumb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/firecrumb/32/35370_2.png) [@FireCrumb](https://discourse.julialang.org/u/FireCrumb)
#### Post date: [May 8, 2022, 8:50am UTC](https://discourse.julialang.org/t/call-enumx-macro-with-namedtuple-constant-as-input/80699/1 "2022-05-08T08:50:30Z")

</div>

Hi, I have a [NamedTuple](https://github.com/JuliaIO/ProtoBuf.jl/blob/v0.11.5/test/testcodec.jl#L286) and would like to create an [EnumX](https://discourse.julialang.org/t/ann-enumx-jl-improved-enums-for-julia/78096) from it, how can this be done?  
CC @fredrikekre

Specifically, I’m using [ProtoBuf.il](https://github.com/JuliaIO/ProtoBuf.jl) to load an [enum from Protocol Buffers](https://developers.google.com/protocol-buffers/docs/proto#enum).

And I want to create a new type using [`@enumx` macro](https://github.com/fredrikekre/EnumX.jl), where the input to the macro would be the NamedTuple key-value pairs as arguments.

* * *

Input:

```julia
const SrcProtoBufEnum = (;[
    Symbol("UNIVERSAL") => Int32(0),
    Symbol("WEB") => Int32(1),
    Symbol("IMAGES") => Int32(2),
    Symbol("LOCAL") => Int32(3),
    Symbol("NEWS") => Int32(4),
    Symbol("PRODUCTS") => Int32(5),
    Symbol("VIDEO") => Int32(6),
]...)

```

Output:

```julia
using EnumX
@enumx DstEnumX UNIVERSAL=0 WEB=1 IMAGES=2 LOCAL=3 NEWS=4 PRODUCTS=5 VIDEO=6

```

---

<div class="post-metadata">

### Author: ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)
#### Post date: [May 9, 2022, 11:43am UTC](https://discourse.julialang.org/t/call-enumx-macro-with-namedtuple-constant-as-input/80699/2 "2022-05-09T11:43:21Z")

</div>

```julia
julia> using EnumX

julia> const SrcProtoBufEnum = (;[
           Symbol("UNIVERSAL") => Int32(0),
           Symbol("WEB") => Int32(1),
           Symbol("IMAGES") => Int32(2),
           Symbol("LOCAL") => Int32(3),
           Symbol("NEWS") => Int32(4),
           Symbol("PRODUCTS") => Int32(5),
           Symbol("VIDEO") => Int32(6),
       ]...);

julia> @eval @enumx DstEnumX $([:($k = $v) for (k, v) in pairs(SrcProtoBufEnum)]...)

julia> DstEnumX.T
Enum type DstEnumX.T <: Enum{Int32} with 7 instances:
 DstEnumX.UNIVERSAL = 0
 DstEnumX.WEB = 1
 DstEnumX.IMAGES = 2
 DstEnumX.LOCAL = 3
 DstEnumX.NEWS = 4
 DstEnumX.PRODUCTS = 5
 DstEnumX.VIDEO = 6

```
