mirror of
https://github.com/waku-org/nwaku.git
synced 2025-02-07 04:24:18 +00:00
This reverts commit 8897ae1a2f9ef4dac98f982a6250ed378bc3d234. (cherry picked from commit b213b2c385b0534481448cd6e30af18e183d0504)
56 lines
1.5 KiB
Nim
56 lines
1.5 KiB
Nim
|
|
when (NimMajor, NimMinor) < (1, 4):
|
|
{.push raises: [Defect].}
|
|
else:
|
|
{.push raises: [].}
|
|
|
|
import
|
|
std/[strutils, options],
|
|
regex,
|
|
stew/results
|
|
import
|
|
../retention_policy,
|
|
./retention_policy_time,
|
|
./retention_policy_capacity
|
|
|
|
proc new*(T: type RetentionPolicy,
|
|
retPolicy: string):
|
|
RetentionPolicyResult[Option[RetentionPolicy]] =
|
|
|
|
# Validate the retention policy format
|
|
if retPolicy == "" or retPolicy == "none":
|
|
return ok(none(RetentionPolicy))
|
|
|
|
const StoreMessageRetentionPolicyRegex = re"^\w+:\w+$"
|
|
if not retPolicy.match(StoreMessageRetentionPolicyRegex):
|
|
return err("invalid 'store message retention policy' format: " & retPolicy)
|
|
|
|
# Apply the retention policy, if any
|
|
let rententionPolicyParts = retPolicy.split(":", 1)
|
|
let
|
|
policy = rententionPolicyParts[0]
|
|
policyArgs = rententionPolicyParts[1]
|
|
|
|
if policy == "time":
|
|
var retentionTimeSeconds: int64
|
|
try:
|
|
retentionTimeSeconds = parseInt(policyArgs)
|
|
except ValueError:
|
|
return err("invalid time retention policy argument")
|
|
|
|
let retPolicy: RetentionPolicy = TimeRetentionPolicy.init(retentionTimeSeconds)
|
|
return ok(some(retPolicy))
|
|
|
|
elif policy == "capacity":
|
|
var retentionCapacity: int
|
|
try:
|
|
retentionCapacity = parseInt(policyArgs)
|
|
except ValueError:
|
|
return err("invalid capacity retention policy argument")
|
|
|
|
let retPolicy: RetentionPolicy = CapacityRetentionPolicy.init(retentionCapacity)
|
|
return ok(some(retPolicy))
|
|
|
|
else:
|
|
return err("unknown retention policy")
|