mirror of
https://github.com/codex-storage/nim-codex.git
synced 2025-02-22 09:38:12 +00:00
doesn't work because toml serialization is broken for writes and json serialization is broken for reads
220 lines
5.9 KiB
Nim
220 lines
5.9 KiB
Nim
## Nim-Codex
|
|
## Copyright (c) 2022 Status Research & Development GmbH
|
|
## Licensed under either of
|
|
## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
|
## * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
|
## at your option.
|
|
## This file may not be copied, modified, or distributed except according to
|
|
## those terms.
|
|
|
|
import pkg/upraises
|
|
|
|
push: {.upraises: [].}
|
|
|
|
import std/strutils
|
|
|
|
import pkg/libp2p
|
|
import pkg/libp2p/crypto/secp
|
|
import pkg/libp2p/crypto/crypto
|
|
import pkg/libp2pdht
|
|
import pkg/confutils/defs
|
|
import pkg/confutils/std/net
|
|
import confutils/toml/std/uri
|
|
import pkg/chronicles
|
|
import pkg/toml_serialization
|
|
import pkg/json_serialization
|
|
import pkg/stew/byteutils
|
|
import pkg/ethers
|
|
|
|
import ../conf
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: SignedPeerRecord)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue(value.toUri)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var SignedPeerRecord)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
discard value.fromURI(r.readValue(string))
|
|
except CatchableError as exc:
|
|
raise newException(Defect, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: secp.SkPublicKey)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue(value.getBytes().to0xHex)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var secp.SkPublicKey)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = secp.SkPublicKey
|
|
.init(r.readValue(string))
|
|
.expect("Hex encoded byte array expected for public key")
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: crypto.PublicKey)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue(value.getBytes().get.to0xHex)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var crypto.PublicKey)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = crypto.PublicKey
|
|
.init(r.readValue(string))
|
|
.expect("Hex encoded byte array expected for public key")
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: MultiAddress)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue($value)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: seq[MultiAddress])
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeIterable(value)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var MultiAddress)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = MultiAddress.init(r.readValue(string)).get()
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: LogLevel)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue($value)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var LogLevel)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = strutils.parseEnum[LogLevel](r.readValue(string))
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: LogKind)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue($value)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var LogKind)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = strutils.parseEnum[LogKind](r.readValue(string))
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: ValidIpAddress)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writeStackTrace()
|
|
writer.writeValue($value)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var ValidIpAddress)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = ValidIpAddress.init(r.readValue(string))
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: Option[string])
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
if value.isSome:
|
|
writer.writeValue(value.get)
|
|
else:
|
|
writer.writeValue("")
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var Option[string])
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = r.readValue(string).some
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: Option[LogLevel])
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
if value.isSome:
|
|
writer.writeValue($value.get)
|
|
else:
|
|
writer.writeValue("INFO")
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var Option[LogLevel])
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = strutils.parseEnum[LogLevel](r.readValue(string)).some
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: Port)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue(value.int)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var Port)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = Port r.readValue(int)
|
|
except ValueError as exc:
|
|
raise newException(Defect, exc.msg)
|
|
|
|
proc writeValue*(
|
|
writer: var TomlWriter,
|
|
value: EthAddress)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
writer.writeValue($value)
|
|
|
|
proc readValue*(
|
|
r: var TomlReader,
|
|
value: var EthAddress)
|
|
{.raises: [Defect, SerializationError, IOError].} =
|
|
try:
|
|
value = EthAddress.init(r.readValue(string)).get()
|
|
except ValueError as exc:
|
|
raise newException(SerializationError, exc.msg)
|
|
|
|
template writeValue*(writer: var TomlWriter,
|
|
value: TypedInputFile|InputFile|InputDir|OutPath|OutDir|OutFile) =
|
|
writer.writeValue(string value)
|
|
|
|
template readValue*(reader: var TomlReader,
|
|
value: var TypedInputFile|InputFile|InputDir|OutPath|OutDir|OutFile) =
|
|
value = typeof(value) reader.readValue(string)
|