Skip to content

src/scale/scale.hpp

Namespaces

Name
sgns
sgns::scale

Functions

Name
template <typename... Args>
outcome::result< std::vector< uint8_t > >
encode(Args &&... args)
convenience function for encoding primitives data to stream
template <class T >
outcome::result< T >
decode(gsl::span< const uint8_t > span)
convenience function for decoding primitives data from stream

Functions Documentation

function encode

template <typename... Args>
outcome::result< std::vector< uint8_t > > encode(
    Args &&... args
)

convenience function for encoding primitives data to stream

Parameters:

  • args data to encode

Template Parameters:

  • Args primitive types to be encoded

Return: encoded data

function decode

template <class T >
outcome::result< T > decode(
    gsl::span< const uint8_t > span
)

convenience function for decoding primitives data from stream

Parameters:

  • span of bytes with encoded data

Template Parameters:

  • T primitive type that is decoded from provided span

Return: decoded T

Source code

#ifndef SUPERGENIUS_SCALE_HPP
#define SUPERGENIUS_SCALE_HPP

#include <vector>

#include <boost/system/system_error.hpp>
#include <boost/throw_exception.hpp>
#include <gsl/span>

#include "outcome/outcome.hpp"
#include "scale/scale_decoder_stream.hpp"
#include "scale/scale_encoder_stream.hpp"

namespace sgns::scale {
  template <typename... Args>
  outcome::result<std::vector<uint8_t>> encode(Args &&... args) {
    ScaleEncoderStream s{};
    try {
      (s << ... << std::forward<Args>(args));
    } catch (std::system_error &e) {
      return outcome::failure(e.code());
    }
    return s.data();
  }

  template <class T>
  outcome::result<T> decode(gsl::span<const uint8_t> span) {
    T t{};
    ScaleDecoderStream s(span);
    try {
      s >> t;
    } catch (std::system_error &e) {
      return outcome::failure(e.code());
    }

    return outcome::success(t);
  }
}  // namespace sgns::scale
#endif  // SUPERGENIUS_SCALE_HPP

Updated on 2026-03-04 at 13:10:45 -0800