OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-proto-peer / spec / state-base / contract / hyperdispatch / messages.js

136 lines · javascript ref:
// This file is autogenerated by the hyperschema compiler
// Schema Version: 1
/* eslint-disable camelcase */
/* eslint-disable quotes */
/* eslint-disable space-before-function-paren */

const { c } = require('hyperschema/runtime')

const VERSION = 1

// eslint-disable-next-line no-unused-vars
let version = VERSION

// @state/entry
const encoding0 = {
  preencode(state, m) {
    c.string.preencode(state, m.key)
    state.end++ // max flag is 4 so always one byte

    if (m.value) c.string.preencode(state, m.value)
    if (m.ts) c.uint.preencode(state, m.ts)
    if (m.admit) c.string.preencode(state, m.admit)
  },
  encode(state, m) {
    const flags = (m.value ? 1 : 0) | (m.ts ? 2 : 0) | (m.admit ? 4 : 0)

    c.string.encode(state, m.key)
    c.uint.encode(state, flags)

    if (m.value) c.string.encode(state, m.value)
    if (m.ts) c.uint.encode(state, m.ts)
    if (m.admit) c.string.encode(state, m.admit)
  },
  decode(state) {
    const r0 = c.string.decode(state)
    const flags = c.uint.decode(state)

    return {
      key: r0,
      value: (flags & 1) !== 0 ? c.string.decode(state) : null,
      ts: (flags & 2) !== 0 ? c.uint.decode(state) : 0,
      admit: (flags & 4) !== 0 ? c.string.decode(state) : null
    }
  }
}

// @state/entry-key
const encoding1 = {
  preencode(state, m) {
    c.string.preencode(state, m.key)
    state.end++ // max flag is 1 so always one byte

    if (m.ts) c.uint.preencode(state, m.ts)
  },
  encode(state, m) {
    const flags = m.ts ? 1 : 0

    c.string.encode(state, m.key)
    c.uint.encode(state, flags)

    if (m.ts) c.uint.encode(state, m.ts)
  },
  decode(state) {
    const r0 = c.string.decode(state)
    const flags = c.uint.decode(state)

    return {
      key: r0,
      ts: (flags & 1) !== 0 ? c.uint.decode(state) : 0
    }
  }
}

function setVersion(v) {
  version = v
}

function encode(name, value, v = VERSION) {
  version = v
  return c.encode(getEncoding(name), value)
}

function decode(name, buffer, v = VERSION) {
  version = v
  return c.decode(getEncoding(name), buffer)
}

function getEnum(name) {
  switch (name) {
    default:
      throw new Error('Enum not found ' + name)
  }
}

function getEncoding(name) {
  switch (name) {
    case '@state/entry':
      return encoding0
    case '@state/entry-key':
      return encoding1
    default:
      throw new Error('Encoder not found ' + name)
  }
}

function getStruct(name, v = VERSION) {
  const enc = getEncoding(name)
  return {
    preencode(state, m) {
      version = v
      enc.preencode(state, m)
    },
    encode(state, m) {
      version = v
      enc.encode(state, m)
    },
    decode(state) {
      version = v
      return enc.decode(state)
    }
  }
}

const resolveStruct = getStruct // compat

module.exports = {
  resolveStruct,
  getStruct,
  getEnum,
  getEncoding,
  encode,
  decode,
  setVersion,
  version
}