I'm completely new to nim and I'm trying to reproduce this pascal type so that 
I can read a response from a socket into it...
    
    
    TUDPData=packed record
        DataType:   word;
        SubType:    word;
        Chan:       word;
        Len:        word;
        Data:       packed record
                          case byte of
                          0:(AsChannelStatus01: TChannelStatus01);
                          1:(AsVoltageList: packed array[0..127] of single);
                          2:(AsCurrentList: packed array[0..127] of single);
                          3:(AsAuxValues: packed array[0..47] of single);
                          4:(AsAuxEU: packed array[0..47] of packed array[0..3] 
of AnsiChar);
                          5:(AsChannelSpec: TChannelSpec);
                          6:(AsSafetySpec: TSafetySpec);
                          7:(AsStartData01: TStartData01);
                          8:(AsVersionInfo: TVersionInfo);
                          9:(AsTestNameAndComments: TTestNameAndComments);
                          10:(AsSMBInfoStatus: TSMBInfoStatus);
                          11:(AsSMBScanListEntry: TSMBScanListEntry);
                          12:(AsSMBGenericWrite: TAsSMBGenericWrite);
                          13:(AsSMBGenericRead: TAsSMBGenericRead);
                          140:(AsSMBGenericReadData: TAsSMBGenericReadData);
                          14:(AsSystemInfo: TSystemInfo);
                          15:(AsCalDates: TCalDates);
                          16:(AsChannelStatus: TAsChannelStatus);
                          17:(AsChannelVARS: TAsChannelVARS);
                          18:(AsStartDirectMode: TAsStartDirectMode);
                          19:(AsSetOutputDirectMode: TAsSetOutputDirectMode);
                          20:(AsSetVAR: TAsSetVAR);
                          252:(AsSingles: packed array[0..127] of single);
                          253:(AsDWords: packed array[0..127] of dword);
                          254:(AsWords: packed array[0..255] of word);
                          255:(AsBytes: packed array[0..511] of byte);
                        end);
      end;
    

so I know I can just create a union like so:
    
    
    type
        TUDPData {.packed.} = object
                data_type
                , sub_data_type
                , channel
                , len: uint16
                data: Data
        
        Data {.packed.} = object {.union.}
            version_info: VersionInfo
            system_info: SystemInfo
            name: TestNameAndComments
            channel_status: ChannelStatus
            channel_status_matrix: array[128, LimitedChannelStatus]
    

but I feel like I'm translating this wrong and I should be using object 
variants probably. I'm fairly green and just trying to learn so just a push in 
the right direction or some reading material would be super helpful.

Reply via email to