2023-11-01 03:32:09 +00:00
|
|
|
# Nimbus
|
2024-06-14 07:31:08 +00:00
|
|
|
# Copyright (c) 2019-2024 Status Research & Development GmbH
|
2023-11-01 03:32:09 +00:00
|
|
|
# Licensed under either of
|
|
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
|
|
|
# http://opensource.org/licenses/MIT)
|
|
|
|
# at your option. This file may not be copied, modified, or distributed except
|
|
|
|
# according to those terms.
|
|
|
|
|
2019-03-18 03:05:24 +00:00
|
|
|
import
|
2024-06-14 07:31:08 +00:00
|
|
|
std/[parseopt, strutils],
|
|
|
|
results
|
2019-03-18 03:05:24 +00:00
|
|
|
|
|
|
|
type
|
|
|
|
ConfigStatus* = enum
|
|
|
|
## Configuration status flags
|
|
|
|
Success, ## Success
|
|
|
|
EmptyOption, ## No options in category
|
|
|
|
ErrorUnknownOption, ## Unknown option in command line found
|
|
|
|
ErrorParseOption, ## Error in parsing command line option
|
|
|
|
ErrorIncorrectOption, ## Option has incorrect value
|
|
|
|
Error ## Unspecified error
|
|
|
|
|
|
|
|
Configuration = ref object
|
|
|
|
testSubject*: string
|
2023-01-10 17:02:21 +00:00
|
|
|
fork*: string
|
2024-06-14 07:31:08 +00:00
|
|
|
index*: Opt[int]
|
2019-08-19 14:12:32 +00:00
|
|
|
trace*: bool
|
2020-02-19 14:26:16 +00:00
|
|
|
legacy*: bool
|
2020-02-19 14:50:03 +00:00
|
|
|
pruning*: bool
|
2023-09-24 23:53:20 +00:00
|
|
|
json*: bool
|
2019-03-18 03:05:24 +00:00
|
|
|
|
|
|
|
var testConfig {.threadvar.}: Configuration
|
|
|
|
|
|
|
|
proc initConfiguration(): Configuration =
|
|
|
|
result = new Configuration
|
2019-08-19 14:12:32 +00:00
|
|
|
result.trace = true
|
2020-02-19 14:50:03 +00:00
|
|
|
result.pruning = true
|
2019-03-18 03:05:24 +00:00
|
|
|
|
|
|
|
proc getConfiguration*(): Configuration {.gcsafe.} =
|
|
|
|
if isNil(testConfig):
|
|
|
|
testConfig = initConfiguration()
|
|
|
|
result = testConfig
|
|
|
|
|
|
|
|
proc processArguments*(msg: var string): ConfigStatus =
|
|
|
|
var
|
|
|
|
opt = initOptParser()
|
|
|
|
config = getConfiguration()
|
|
|
|
|
|
|
|
result = Success
|
|
|
|
for kind, key, value in opt.getopt():
|
|
|
|
case kind
|
|
|
|
of cmdArgument:
|
|
|
|
config.testSubject = key
|
|
|
|
of cmdLongOption, cmdShortOption:
|
|
|
|
case key.toLowerAscii()
|
2023-01-10 17:02:21 +00:00
|
|
|
of "fork": config.fork = value
|
2024-06-14 07:31:08 +00:00
|
|
|
of "index": config.index = Opt.some(parseInt(value))
|
2019-08-19 14:12:32 +00:00
|
|
|
of "trace": config.trace = parseBool(value)
|
2020-02-19 14:26:16 +00:00
|
|
|
of "legacy": config.legacy = parseBool(value)
|
2020-02-19 14:50:03 +00:00
|
|
|
of "pruning": config.pruning = parseBool(value)
|
2023-09-24 23:53:20 +00:00
|
|
|
of "json": config.json = parseBool(value)
|
2019-03-18 03:05:24 +00:00
|
|
|
else:
|
|
|
|
msg = "Unknown option " & key
|
|
|
|
if value.len > 0: msg = msg & " : " & value
|
|
|
|
result = ErrorUnknownOption
|
|
|
|
break
|
|
|
|
of cmdEnd:
|
2019-03-19 01:35:37 +00:00
|
|
|
doAssert(false)
|