Files
herolib/lib/hero/ledger/account_serialize.v
2025-12-02 03:27:17 +01:00

123 lines
3.5 KiB
V

module ledger
import incubaid.herolib.data.encoder
pub fn (self AccountPolicy) dump(mut e encoder.Encoder) ! {
e.add_u16(1) // version
e.add_u32(self.policy_id)
e.add_list_u32(self.admins)
e.add_u8(self.min_signatures)
e.add_u32(u32(self.limits.len))
for limit in self.limits {
limit.dump(mut e)!
}
e.add_list_u32(self.whitelist_out)
e.add_list_u32(self.whitelist_in)
e.add_u32(self.lock_till)
e.add_u8(u8(self.admin_lock_type))
e.add_u32(self.admin_lock_till)
e.add_list_u32(self.admin_unlock)
e.add_u8(self.admin_unlock_min_signature)
e.add_list_u32(self.clawback_accounts)
e.add_u8(self.clawback_min_signatures)
e.add_u32(self.clawback_from)
e.add_u32(self.clawback_till)
}
fn (mut self AccountPolicy) load(mut e encoder.Decoder) ! {
version := e.get_u16()!
assert version == 1, 'Unsupported AccountPolicyP version: ${version}'
self.policy_id = e.get_u32()!
self.admins = e.get_list_u32()!
self.min_signatures = e.get_u8()!
limits_len := e.get_u32()!
self.limits = []AccountLimit{cap: int(limits_len)}
for _ in 0 .. limits_len {
mut limit := AccountLimit{}
limit.load(mut e)!
self.limits << limit
}
self.whitelist_out = e.get_list_u32()!
self.whitelist_in = e.get_list_u32()!
self.lock_till = e.get_u32()!
self.admin_lock_type = unsafe { LockType(e.get_u8()!) }
self.admin_lock_till = e.get_u32()!
self.admin_unlock = e.get_list_u32()!
self.admin_unlock_min_signature = e.get_u8()!
self.clawback_accounts = e.get_list_u32()!
self.clawback_min_signatures = e.get_u8()!
self.clawback_from = e.get_u32()!
self.clawback_till = e.get_u32()!
}
pub fn (self AccountLimit) dump(mut e encoder.Encoder) ! {
e.add_u16(1) // version
e.add_u64(self.amount)
e.add_u32(self.asset_id)
e.add_u8(u8(self.period))
}
fn (mut self AccountLimit) load(mut e encoder.Decoder) ! {
version := e.get_u16()!
assert version == 1, 'Unsupported AccountLimitP version: ${version}'
self.amount = e.get_u32()!
self.asset_id = e.get_u32()!
self.period = unsafe { AccountLimitPeriodLimit(e.get_u8()!) }
}
pub fn (self AccountAsset) dump(mut e encoder.Encoder) ! {
e.add_u16(1) // version
e.add_u32(self.assetid)
e.add_u64(self.balance)
e.add_map_string(self.metadata)
}
fn (mut self AccountAsset) load(mut e encoder.Decoder) ! {
version := e.get_u16()!
assert version == 1, 'Unsupported AccountAssetP version: ${version}'
self.assetid = e.get_u32()!
self.balance = e.get_u32()!
self.metadata = e.get_map_string()!
}
pub fn (self Account) dump(mut e encoder.Encoder) ! {
e.add_u16(1) // version
e.add_u32(self.owner_id)
e.add_u32(self.location_id)
e.add_u32(u32(self.accountpolicies.len))
for policy in self.accountpolicies {
policy.dump(mut e)!
}
e.add_u32(u32(self.assets.len))
for asset in self.assets {
asset.dump(mut e)!
}
e.add_u32(self.assetid)
e.add_u32(self.last_activity)
e.add_list_u32(self.administrators)
}
fn (mut self DBAccount) load(mut o Account, mut e encoder.Decoder) ! {
version := e.get_u16()!
assert version == 1, 'Unsupported Account version: ${version}'
o.owner_id = e.get_u32()!
o.location_id = e.get_u32()!
policies_len := e.get_u32()!
o.accountpolicies = []AccountPolicy{cap: int(policies_len)}
for _ in 0 .. policies_len {
mut policy := AccountPolicy{}
policy.load(mut e)!
o.accountpolicies << policy
}
assets_len := e.get_u32()!
o.assets = []AccountAsset{cap: int(assets_len)}
for _ in 0 .. assets_len {
mut asset := AccountAsset{}
asset.load(mut e)!
o.assets << asset
}
o.assetid = e.get_u32()!
o.last_activity = e.get_u32()!
o.administrators = e.get_list_u32()!
}