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