const e = require("compact-encoding"),
{ PluginRecord: o } = require("../plugins/messages"),
n = {
SUBTYPE: 0,
preencode(o, n) {
e.uint.preencode(o, n.version)
},
encode(o, n) {
e.uint.encode(o, n.version)
},
decode: (o) => ({ version: e.uint.decode(o) }),
},
d = {
SUBTYPE: 1,
preencode(e, n) {
o.preencode(e, n)
},
encode(e, n) {
o.encode(e, n)
},
decode: (e) => o.decode(e),
},
t = {
preencode(o, n) {
e.fixed32.preencode(o, n.noisePublicKey)
},
encode(o, n) {
e.fixed32.encode(o, n.noisePublicKey)
},
decode: (o) => ({ noisePublicKey: e.fixed32.decode(o) }),
},
r = {
SUBTYPE: 2,
preencode(o, n) {
let d = 0
;(n.experimental && (d |= 1),
n.roomType && (d |= 2),
n.title && (d |= 4),
e.uint.preencode(o, d),
e.uint.preencode(o, n.version),
t.preencode(o, n.bootstrap),
n.title && e.string.preencode(o, n.title),
n.roomType && e.uint.preencode(o, n.roomType))
},
encode(o, n) {
let d = 0
;(n.experimental && (d |= 1),
n.roomType && (d |= 2),
n.title && (d |= 4),
e.uint.encode(o, d),
e.uint.encode(o, n.version),
t.encode(o, n.bootstrap),
n.title && e.string.encode(o, n.title),
n.roomType && e.uint.encode(o, n.roomType))
},
decode(o) {
const n = e.uint.decode(o)
return {
version: e.uint.decode(o),
bootstrap: t.decode(o),
experimental: !!(1 & n),
roomType: 2 & n ? e.uint.decode(o) : 0,
title: 4 & n ? e.string.decode(o) : 0,
}
},
},
c = {
TYPE: 0,
preencode(o, n) {
;(e.uint.preencode(o, n.subtype), i(n.subtype).preencode(o, n.value))
},
encode(o, n) {
;(e.uint.encode(o, n.subtype), i(n.subtype).encode(o, n.value))
},
decode(o) {
const n = e.uint.decode(o)
return { subtype: n, value: i(n).decode(o) }
},
}
function i(e) {
switch (e) {
case n.SUBTYPE:
return n
case d.SUBTYPE:
return d
case r.SUBTYPE:
return r
default:
throw new Error("Invalid internal operation subtype")
}
}
module.exports = {
InternalOperation: c,
GenesisOperation: r,
UpgradeOperation: n,
AddPluginOperation: d,
}