Well it does not even need a macro the above works fine simply modified. 
    
    
    import std/options
    proc toEnum*(val: SomeInteger, E: typedesc[enum]): Option[E] =
      const enmRange = E.low.ord .. E.high.ord
      when E is Ordinal:
        if val in enmRange:
          some(val)
        else:
          none(E)
      else:
        if val in enmRange and val.E in E.enumElementsAsSet:
          some(val)
        else:
          none(E)
    
    
    Run

Reply via email to