import strformat type Revision = object value: uint32 proc new_revision(major: uint16, minor: uint16): Revision = let major = major.uint32; let minor = minor.uint32; let value = (major shl 16) or minor; return Revision(value: value); method major(self: Revision): uint16 {.base.} = return (self.value shr 16).uint16; method minor(self: Revision): uint16 {.base.} = return (self.value and 0xFFFF).uint16; proc `$`(self: Revision): string = let major = self.major(); let minor = self.minor(); if major < 2: return fmt"{major}.{minor}"; # here