jetstream 16.0.0

Jetstream is a RPC framework for Rust, based on the 9P protocol and QUIC.
Documentation
// JetStream WireFormat — Composite Type Helpers
// Copyright (c) 2024, Sevki <s@sevki.io>
// SPDX-License-Identifier: BSD-3-Clause

import Foundation

// r[impl jetstream.wireformat.struct]
// r[impl jetstream.wireformat.swift.struct]
// Structs conforming to WireFormat should encode/decode fields sequentially
// in declaration order. No length prefix or field names on the wire.
//
// Example:
//   struct MyStruct: WireFormat {
//       var x: UInt32
//       var y: String
//
//       func byteSize() -> UInt32 {
//           x.byteSize() + y.byteSize()
//       }
//       func encode(writer: inout BinaryWriter) throws {
//           try x.encode(writer: &writer)
//           try y.encode(writer: &writer)
//       }
//       static func decode(reader: inout BinaryReader) throws -> MyStruct {
//           let x = try UInt32.decode(reader: &reader)
//           let y = try String.decode(reader: &reader)
//           return MyStruct(x: x, y: y)
//       }
//   }

// r[impl jetstream.wireformat.enum]
// r[impl jetstream.wireformat.swift.enum]
// Enums conforming to WireFormat should use a u8 variant index (0-based)
// followed by the variant's fields encoded sequentially.
//
// Example:
//   enum MyEnum: WireFormat {
//       case a             // variant 0
//       case b(UInt32)     // variant 1
//       case c(String)     // variant 2
//
//       func byteSize() -> UInt32 {
//           switch self {
//           case .a: return 1
//           case .b(let v): return 1 + v.byteSize()
//           case .c(let s): return 1 + s.byteSize()
//           }
//       }
//       func encode(writer: inout BinaryWriter) throws {
//           switch self {
//           case .a:
//               writer.writeU8(0)
//           case .b(let v):
//               writer.writeU8(1)
//               try v.encode(writer: &writer)
//           case .c(let s):
//               writer.writeU8(2)
//               try s.encode(writer: &writer)
//           }
//       }
//       static func decode(reader: inout BinaryReader) throws -> MyEnum {
//           let variant = try reader.readU8()
//           switch variant {
//           case 0: return .a
//           case 1: return .b(try UInt32.decode(reader: &reader))
//           case 2: return .c(try String.decode(reader: &reader))
//           default: throw WireFormatError.invalidEnumVariant(variant)
//           }
//       }
//   }