`Message.msg` is the enum `MsgKind`, but `msg` for the proc is string, int or 
float. Those types aren't compatible.

You want something like this
    
    
    type
      MsgKind = enum
        mkString,
        mkInt,
        mkFloat
      
      Message* = object
        topic*: string
        id*: string
        msgtype*: string   #"p/s", "req/rep", "reply". req/rep requires id
        case msg*: MsgKind
          of mkString: strVal: string
          of mkInt: intVal: int
          of mkFloat: floatVal: float
    
    proc post*(topic:string, msg:string|int|float, id:string = "", 
msgtype:string = "p/s")  =
      var message =
        when msg is string:
          Message(
            topic: topic,
            msg: mkString,
            strVar: msg,
            id: id,
            msgType: msgType
          )
        elif msg is int:
          Message(
            topic: topic,
            msg: mkInt,
            intVal: msg,
            id: id,
            msgType: msgType
          )
        elif msg is float:
          Message(
            topic: topic,
            msg: mkString,
            floatVal: msg,
            id: id,
            msgType: msgType
          )
    
    
    Run

Do you need to know the different msg types and do something with that 
knowledge? If not, You can do something like this
    
    
    type
      Message*[T] = object
        topic*: string
        id*: string
        msgtype*: string   #"p/s", "req/rep", "reply". req/rep requires id
        msg*: T
    
    proc post*[T](topic:string, msg: T, id:string = "", msgtype:string = "p/s") 
 =
      var message = Message[T](
            topic: topic,
            msg: msg,
            id: id,
            msgType: msgType
          )
    
    
    Run

Reply via email to