// This file is autogenerated by the hyperdispatch compiler
/* eslint-disable camelcase */
const { c, b4a, assert, DispatchError, ERRORS } = require('hyperdispatch/runtime')
const { version, getEncoding, setVersion } = require('./messages.js')
const defaultVersion = version
class Router {
constructor () {
this._handler0 = null
this._handler1 = null
this._missing = 2
}
add (name, handler) {
switch (name) {
case '@state/set-entry':
this._handler0 = handler
break
case '@state/del-entry':
this._handler1 = handler
break
default:
throw DispatchError.NONEXISTENT_ROUTE(name)
}
this._missing--
}
_checkAll () {
assert(this._handler0 !== null, 'Missing handler for "@state/set-entry"')
assert(this._handler1 !== null, 'Missing handler for "@state/del-entry"')
}
async dispatch (message, context) {
if (this._missing > 0) {
this._checkAll()
}
setVersion(defaultVersion)
const op = b4a.isBuffer(message) ? decode(message) : message
switch (op.id) {
case 0:
return this._handler0(op.value, context)
case 1:
return this._handler1(op.value, context)
default:
throw DispatchError.HANDLER_NOT_FOUND_BY_ID(op.id)
}
}
}
function encode (name, message, { version = defaultVersion } = {}) {
const state = { buffer: null, start: 0, end: 0 }
const route = getRouteByName(name)
setVersion(version)
c.uint.preencode(state, route.id)
route.enc.preencode(state, message)
state.buffer = b4a.allocUnsafe(state.end)
c.uint.encode(state, route.id)
route.enc.encode(state, message)
return state.buffer
}
function decode (buffer, { version = defaultVersion } = {}) {
const state = { buffer, start: 0, end: buffer.length }
const id = c.uint.decode(state)
const route = getRouteById(id)
setVersion(version)
const value = route.enc.decode(state)
return { id, name: route.name, value }
}
const route0 = {
name: '@state/set-entry',
id: 0,
enc: getEncoding('@state/entry')
}
const route1 = {
name: '@state/del-entry',
id: 1,
enc: getEncoding('@state/entry-key')
}
function getRouteByName (name) {
switch (name) {
case '@state/set-entry':
return route0
case '@state/del-entry':
return route1
default:
throw DispatchError.ROUTE_NOT_FOUND_BY_NAME(name)
}
}
function getRouteById (id) {
switch (id) {
case 0:
return route0
case 1:
return route1
default:
throw DispatchError.HANDLER_NOT_FOUND_BY_ID(id)
}
}
module.exports = {
version,
encode,
decode,
Router,
DispatchError,
ERRORS
}