Skip to content

Generate Model Classes Streaming Protocol Specification

NOTE

This is used by the VS Code extension to generate the model classes

Protocol Overview

The protocol follows a strictly sequential structure. Data is transmitted as a contiguous stream of File Blocks and concludes with a specific End of Stream (EOS) marker.

To ensure cross-platform compatibility and adherence to standard networking practices, all numeric headers are encoded in Big Endian (Network Byte Order).

Binary Format

1. File Block Structure

Each file in the stream is defined by four distinct segments transmitted in the following order:

SegmentSizeTypeDescription
Path Length4 bytesInt32 (BE)The length ($N$) of the UTF-8 encoded file path.
Path Data$N$ bytesStringThe relative destination path of the file.
Content Length8 bytesInt64 (BE)The total size ($M$) of the file payload.
Content Data$M$ bytesBinaryThe raw binary data of the file.

2. End of Stream (EOS)

The protocol uses a sentinel value to signal the end of the transmission. A stream is considered complete when the consumer encounters a Path Length of 0 (0x00 00 00 00).

Since a valid file must have a path, a zero-length path serves as an unambiguous termination signal, allowing the client to close the connection and finalize operations.

Design Principles

Endianness & Data Types

  • Big Endian: All length prefixes must be written and read as Big Endian. Systems using Little Endian must perform byte swapping.
  • Signed Integers: Lengths are represented as signed integers (Int32 for paths, Int64 for content) to maintain broad compatibility with standard library stream readers.
  • UTF-8 Encoding: All file paths must be UTF-8 encoded without a Byte Order Mark (BOM).

Processing Logic

A compliant consumer should implement the following logic:

  1. Read Header: Extract the first 4 bytes.
  2. Check for Termination: * If value is 0: Terminate processing.
    • If value is > 0: Continue to Step 3.
  3. Extract Metadata: Read $N$ bytes for the path, then 8 bytes for the content length ($M$).
  4. Process Payload: Read exactly $M$ bytes. These bytes represent the file content and can be streamed directly to a destination.
  5. Repeat: Return to Step 1 to look for the next block.

Released under the MIT License.