npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

com.playdarium.unity.byte-formatter

v3.0.0

Published

This framework helps serialize objects to binary format.

Downloads

10

Readme

Byte Formatter

NPM package License: MIT

Installing

Using the native Unity Package Manager introduced in 2017.2, you can add this library as a package by modifying your manifest.json file found at /ProjectName/Packages/manifest.json to include it as a dependency. See the example below on how to reference it.

Install via OpenUPM

The package is available on the npmjs registry.

Add registry scope

{
  "dependencies": {
    ...
    "com.playdarium.unity.byte-formatter": "x.x.x",
    ...
  },
  "scopedRegistries": [
    {
      "name": "Playdarium",
      "url": "https://registry.npmjs.org",
      "scopes": [
        "com.playdarium.unity"
      ]
    }
  ]
}

Add package in PackageManager

Open Window -> Package Manager choose Packages: My Regestries and install package

Install via GIT URL

"com.playdarium.unity.byte-formatter": "https://gitlab.com/pd-packages/byte-formatter.git#upm"

Now version 2 WIP

Introduction

Byte formatter has different pices:

ByteReader and ByteWriter

Write data example:

public byte[] WriteBytesFromState(State state)
{
    var writer = new ByteWriter();
    writer.Write(state.Value1);
    writer.Write(state.Value2);
    return writer.ToArray();
}

The resulting array of bytes will contain data written in a strict sequence. Data reading should be carried out in the same sequence in which they were written.

Read data example:

public State WriteBytesFromState(byte[] bytes)
{
    var state = new State();
    var reader = new ByteReader(bytes);
    state.Value1 = reader.ReadInt32();
    state.Value2 = reader.ReadInt32();
    return state;
}

State serialization

Prepare classes for generation

Serialized class must be public partial and has attribute [ByteDataContext(nameof(SerializedClass))]

The data to be serialized must be properties with an attribute [PropertyKey(ushort key)] where key is start from 1

Serialized class example:

[ByteDataContext(nameof(State))]
public partial class State
{
    [PropertyKey(1)] public int Value1 { get; set; }
    [PropertyKey(2)] public string Value2 { get; set; }
}

After this you can validate writing and reading data Tools/StateSerialize/Validate Serialization

Warning!

If data added or removed or indexes number changed for serialization, you need to create migration

Add custom data writing and reading

Create static class and add specific attribute [ByteExtension] for custom extensions.

Example:

[ByteExtension]
public static class CustomByteFormatterExtensions{
    ...
}

Custom read or write extensions do not support generic types for generation.

Write extension

Method name must in start contains Write word and as argument you custom type.

Example:

public static void WriteMyCustomType(this ByteWriter writer, MyCustomType value)
{
    writer.Write((int) value);
}

Read extension

Method name must contains Read word and no any arguments.

Example:

public static MyCustomType ReadMyCustomType(this ByteReader reader)
{
    return (MyCustomType) reader.ReadInt32();
}

public static void SkipMyCustomType(this ByteReader reader){
    reader.SkipInt32();
}

Byte data validator

For data validation you must create class with attribute [ByteValidatorDataProvider] in Editor folder. Class must provide custom data variants.

Where:

  • DataArray - custom data.
  • DataSizeArray - data size in bytes.
[ByteValidatorDataProvider]
public class MyCustomTypeDataProvider : ADataProvider<MyCustomType>
{
	protected override MyCustomType[] DataArray { get; } = {(MyCustomType) 457};
	protected override int[] DataSizeArray { get; } = {4};
}

State serialization principle

Object mapping

Example state:

[ByteDataContext(nameof(State))]
public partial class State
{
    [PropertyKey(1)] public int Value1 { get; set; }
    [PropertyKey(2)] public int Value2 { get; set; }
}

This is the object map of example state

| Name | Type | Data | Size | |------------------|--------|--------|--------| | Properties Count | ushort | 2 | 2 byte | | Key 1 | ushort | 1 | 2 byte | | Offset 1 | int | 0 | 4 byte | | Key 2 | ushort | 2 | 2 byte | | Offset 2 | int | 4 | 4 byte | | Data 1 | int | Value1 | 4 byte | | Data 2 | int | Value2 | 4 byte |