(.module: [lux #* [abstract [equivalence (#+ Equivalence)]] [data ["." product] ["." text ["%" format]]]] ["." /// (#+ Snapshot) ["#." time] ["#." stamp]]) (type: #export Value {#version Text #snapshot Snapshot}) (def: #export equivalence (Equivalence Value) ($_ product.equivalence text.equivalence ///.equivalence )) (def: separator "-") (def: #export snapshot "SNAPSHOT") (def: #export (format (^slots [#version #snapshot])) (%.Format Value) (case snapshot #///.Local version (#///.Remote stamp) (let [(^slots [#///stamp.time #///stamp.build]) stamp] (%.format (text.replace_all ..snapshot (///time.format time) version) ..separator (%.nat build)))))