cosm/variants

Source   Edit  

Types

ObjectVariantInfos = object
  variants*: seq[VariantInfo]
Source   Edit  
VariantBranch = object
  values*: seq[NimNode]
  fields*: seq[string]
Source   Edit  
VariantInfo = object
  discrimName*: string
  branches*: seq[VariantBranch]
  fieldsToBranch*: Table[string, int]
Source   Edit  
VariantType = (object | ref object)
Source   Edit  

Procs

proc buildFirstVariant(variant: var VariantInfo; list: NimNode): bool {.
    ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc buildVariantInfo(variant: NimNode): VariantInfo {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc buildVariants(obj: NimNode): ObjectVariantInfos {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc firstValue(branch: VariantBranch): NimNode {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc hasVariants(variants: ObjectVariantInfos): bool {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc isElse(branch: VariantBranch): bool {....raises: [], tags: [], forbids: [].}
Source   Edit  

Macros

macro hasVariants[T: VariantType](t: type T): bool
Source   Edit  
macro withFirstVariantField[T: VariantType](obj: T; templToCall: untyped)
calls templToCall with the address of the first variant discriminator field of obj Source   Edit  
macro withFirstVariantFieldName[T: VariantType](obj: typedesc[T];
    templToCall: untyped)
calls templToCall with the identifier of the first variant discriminator field of obj Source   Edit