add configuration

This commit is contained in:
andri lim 2019-01-09 13:37:40 +07:00 committed by zah
parent 9f590a22e8
commit 49bb7bb6e4
1 changed files with 83 additions and 0 deletions

83
premix/configuration.nim Normal file
View File

@ -0,0 +1,83 @@
import stint, os, parseopt, strutils
from ../nimbus/config import getDefaultDataDir, ConfigStatus, processInteger
export ConfigStatus
type
PremixConfiguration* = ref object
dataDir*: string
head*: Uint256
maxBlocks*: int
numCommits*: int
var premixConfig {.threadvar.}: PremixConfiguration
proc getConfiguration*(): PremixConfiguration {.gcsafe.}
proc initConfiguration(): PremixConfiguration =
result = new PremixConfiguration
const dataDir = getDefaultDataDir()
result.dataDir = getHomeDir() / dataDir
result.head = 0.u256
result.maxBlocks = 0
result.numCommits = 128
proc getConfiguration*(): PremixConfiguration =
if isNil(premixConfig):
premixConfig = initConfiguration()
result = premixConfig
proc processU256(val: string, o: var Uint256): ConfigStatus =
if val.len > 2 and val[0] == '0' and val[1] == 'x':
o = Uint256.fromHex(val)
else:
o = parse(val, Uint256)
result = Success
template checkArgument(fun, o: untyped) =
## Checks if arguments got processed successfully
var res = (fun)(value, o)
if res == Success:
continue
elif res == ErrorParseOption:
msg = "Error processing option [" & key & "] with value [" & value & "]"
result = res
break
elif res == ErrorIncorrectOption:
msg = "Incorrect value for option [" & key & "] value [" & value & "]"
result = res
break
proc processArguments*(msg: var string): ConfigStatus =
var
opt = initOptParser()
length = 0
config = getConfiguration()
result = Success
for kind, key, value in opt.getopt():
case kind
of cmdArgument:
discard
of cmdLongOption, cmdShortOption:
inc(length)
case key.toLowerAscii()
of "datadir": config.dataDir = value
of "maxblocks":
checkArgument processInteger, config.maxBlocks
of "head":
checkArgument processU256, config.head
of "numcommits":
checkArgument processInteger, config.numCommits
config.numCommits = max(config.numCommits, 512)
else:
msg = "Unknown option " & key
if value.len > 0: msg = msg & " : " & value
result = ErrorUnknownOption
break
of cmdEnd:
msg = "Error processing option [" & key & "]"
result = ErrorParseOption
break