tiny.quic.cursor
Defined in tiny.quic.
API (16)
Actions
Public operations.
Read.byteRead.initRead.intRead.remainingRead.restRead.takeWrite.byteWrite.initWrite.intWrite.putWrite.remainingWrite.written
Types and contracts
Public types and contracts.
Source
Source: lib/quic/src/cursor.zig
zig
const std = @import("std");pub const ReadError = error{Truncated};pub const WriteError = error{NoSpace};pub const Read = struct { bytes: []const u8, index: usize, pub fn init(bytes: []const u8) Read { return .{ .bytes = bytes, .index = 0 }; } pub fn remaining(self: *const Read) usize { std.debug.assert(self.index <= self.bytes.len); return self.bytes.len - self.index; } pub fn take(self: *Read, count: usize) ReadError![]const u8 { std.debug.assert(self.index <= self.bytes.len); if (count > self.bytes.len - self.index) return error.Truncated; const start = self.index; self.index += count; std.debug.assert(self.index <= self.bytes.len); return self.bytes[start..self.index]; } pub fn byte(self: *Read) ReadError!u8 { return (try self.take(1))[0]; } pub fn int(self: *Read, comptime T: type) ReadError!T { comptime std.debug.assert(@bitSizeOf(T) % 8 == 0); const byte_count = @divExact(@bitSizeOf(T), 8); const input = try self.take(byte_count); var value: T = 0; for (input) |part| value = (value << 8) | @as(T, part); return value; } pub fn rest(self: *Read) []const u8 { const input = self.bytes[self.index..]; self.index = self.bytes.len; return input; }};pub const Write = struct { bytes: []u8, index: usize, pub fn init(bytes: []u8) Write { return .{ .bytes = bytes, .index = 0 }; } pub fn remaining(self: *const Write) usize { std.debug.assert(self.index <= self.bytes.len); return self.bytes.len - self.index; } pub fn put(self: *Write, input: []const u8) WriteError!void { std.debug.assert(self.index <= self.bytes.len); if (input.len > self.bytes.len - self.index) return error.NoSpace; @memcpy(self.bytes[self.index..][0..input.len], input); self.index += input.len; std.debug.assert(self.index <= self.bytes.len); } pub fn byte(self: *Write, value: u8) WriteError!void { try self.put(&.{value}); } pub fn int(self: *Write, comptime T: type, value: T) WriteError!void { comptime std.debug.assert(@bitSizeOf(T) % 8 == 0); const byte_count = @divExact(@bitSizeOf(T), 8); var output: [byte_count]u8 = undefined; for (0..byte_count) |index| { const shift = (byte_count - 1 - index) * 8; output[index] = @truncate(value >> @intCast(shift)); } try self.put(&output); } pub fn written(self: *const Write) []const u8 { std.debug.assert(self.index <= self.bytes.len); return self.bytes[0..self.index]; }};test "bounded cursors return operational exhaustion errors" { var input = Read.init(&.{0xaa}); try std.testing.expectEqual(@as(u8, 0xaa), try input.byte()); try std.testing.expectError(error.Truncated, input.byte()); var bytes: [1]u8 = undefined; var output = Write.init(&bytes); try output.byte(0x55); try std.testing.expectError(error.NoSpace, output.byte(0x66)); try std.testing.expectEqualSlices(u8, &.{0x55}, output.written());}test "bounded cursors use the wire width of sized integers" { var bytes: [3]u8 = undefined; var output = Write.init(&bytes); try output.int(u24, 0xabcdef); try std.testing.expectEqualSlices(u8, &.{ 0xab, 0xcd, 0xef }, output.written()); var input = Read.init(&bytes); try std.testing.expectEqual(@as(u24, 0xabcdef), try input.int(u24));}Source: lib/quic/src/root.zig:46
zig
pub const cursor = @import("cursor.zig");Complete caller list for cursor.Read.byte
10 direct callers.
lib.quic.src.cursor.test_bounded_cursors_return_operational_exhaustion_errors[function] — test source atlib/quic/src/cursor.zig:90in nearest public ownertiny.quic.cursortiny.quic.packet.decodeLong[function] atlib/quic/src/packet/header.zig:94tiny.quic.packet.decodeShort[function] atlib/quic/src/packet/header.zig:168lib.quic.src.tls.engine.extension.hasU16[function] — private source atlib/quic/src/tls/engine/extension.zig:168in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.offersRawKey[function] — private source atlib/quic/src/tls/engine/extension.zig:235in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:210in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectedAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:225in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverName[function] — private source atlib/quic/src/tls/engine/extension.zig:251in nearest public ownerlib.quic.src.tls.engine.extensiontiny.quic.tls.message.decode[function] atlib/quic/src/tls/message/codec.zig:130lib.quic.src.transport.parsePreferredAddress[function] — private source atlib/quic/src/transport.zig:95in nearest public ownertiny.quic.transport
Complete caller list for cursor.Read.init
19 direct callers.
lib.quic.src.cursor.test_bounded_cursors_return_operational_exhaustion_errors[function] — test source atlib/quic/src/cursor.zig:90in nearest public ownertiny.quic.cursorlib.quic.src.cursor.test_bounded_cursors_use_the_wire_width_of_sized_integers[function] — test source atlib/quic/src/cursor.zig:102in nearest public ownertiny.quic.cursortiny.quic.packet.decodeLong[function] atlib/quic/src/packet/header.zig:94tiny.quic.packet.decodeShort[function] atlib/quic/src/packet/header.zig:168lib.quic.src.tls.engine.extension.clientKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:182in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.hasU16[function] — private source atlib/quic/src/tls/engine/extension.zig:168in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.offersRawKey[function] — private source atlib/quic/src/tls/engine/extension.zig:235in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:210in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectedAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:225in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:200in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverName[function] — private source atlib/quic/src/tls/engine/extension.zig:251in nearest public ownerlib.quic.src.tls.engine.extensiontiny.quic.tls.message.CertificateEntries.iterator[method] atlib/quic/src/tls/message/codec.zig:94tiny.quic.tls.message.Extensions.iterator[method] atlib/quic/src/tls/message/codec.zig:37tiny.quic.tls.message.decode[function] atlib/quic/src/tls/message/codec.zig:130lib.quic.src.tls.message.codec.expected[function] — private source atlib/quic/src/tls/message/codec.zig:159in nearest public ownerlib.quic.src.tls.message.codectiny.quic.transport.decode[function] atlib/quic/src/transport.zig:195lib.quic.src.transport.parsePreferredAddress[function] — private source atlib/quic/src/transport.zig:95in nearest public ownertiny.quic.transportlib.quic.src.transport.readInteger[function] — private source atlib/quic/src/transport.zig:80in nearest public ownertiny.quic.transporttiny.quic.varint.decode[function] atlib/quic/src/varint.zig:59
Complete caller list for cursor.Read.int
11 direct callers.
lib.quic.src.cursor.test_bounded_cursors_use_the_wire_width_of_sized_integers[function] — test source atlib/quic/src/cursor.zig:102in nearest public ownertiny.quic.cursortiny.quic.packet.decodeLong[function] atlib/quic/src/packet/header.zig:94lib.quic.src.tls.engine.extension.clientKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:182in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.hasU16[function] — private source atlib/quic/src/tls/engine/extension.zig:168in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:210in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectedAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:225in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:200in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverName[function] — private source atlib/quic/src/tls/engine/extension.zig:251in nearest public ownerlib.quic.src.tls.engine.extensiontiny.quic.tls.message.ExtensionIterator.next[method] atlib/quic/src/tls/message/codec.zig:46tiny.quic.tls.message.decode[function] atlib/quic/src/tls/message/codec.zig:130lib.quic.src.transport.parsePreferredAddress[function] — private source atlib/quic/src/transport.zig:95in nearest public ownertiny.quic.transport
Complete caller list for cursor.Read.remaining
13 direct callers.
lib.quic.src.tls.engine.extension.clientKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:182in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.hasU16[function] — private source atlib/quic/src/tls/engine/extension.zig:168in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.offersRawKey[function] — private source atlib/quic/src/tls/engine/extension.zig:235in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:210in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectedAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:225in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:200in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverName[function] — private source atlib/quic/src/tls/engine/extension.zig:251in nearest public ownerlib.quic.src.tls.engine.extensiontiny.quic.tls.message.CertificateIterator.next[method] atlib/quic/src/tls/message/codec.zig:103tiny.quic.tls.message.ExtensionIterator.next[method] atlib/quic/src/tls/message/codec.zig:46tiny.quic.tls.message.decode[function] atlib/quic/src/tls/message/codec.zig:130tiny.quic.transport.decode[function] atlib/quic/src/transport.zig:195lib.quic.src.transport.parsePreferredAddress[function] — private source atlib/quic/src/transport.zig:95in nearest public ownertiny.quic.transportlib.quic.src.transport.readInteger[function] — private source atlib/quic/src/transport.zig:80in nearest public ownertiny.quic.transport
Complete caller list for cursor.Read.take
13 direct callers.
tiny.quic.cursor.Read.byte[method] atlib/quic/src/cursor.zig:28tiny.quic.cursor.Read.int[method] atlib/quic/src/cursor.zig:32tiny.quic.packet.decodeShort[function] atlib/quic/src/packet/header.zig:168lib.quic.src.tls.engine.extension.clientKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:182in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.offersRawKey[function] — private source atlib/quic/src/tls/engine/extension.zig:235in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:210in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.selectedAlpn[function] — private source atlib/quic/src/tls/engine/extension.zig:225in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverKeyShare[function] — private source atlib/quic/src/tls/engine/extension.zig:200in nearest public ownerlib.quic.src.tls.engine.extensionlib.quic.src.tls.engine.extension.serverName[function] — private source atlib/quic/src/tls/engine/extension.zig:251in nearest public ownerlib.quic.src.tls.engine.extensiontiny.quic.tls.message.ExtensionIterator.next[method] atlib/quic/src/tls/message/codec.zig:46tiny.quic.tls.message.decode[function] atlib/quic/src/tls/message/codec.zig:130tiny.quic.transport.decode[function] atlib/quic/src/transport.zig:195lib.quic.src.transport.parsePreferredAddress[function] — private source atlib/quic/src/transport.zig:95in nearest public ownertiny.quic.transport
Audit
| Definitions | 17 |
|---|---|
| Public names | 19 |
| Members | 6 |
| Version | 26.7.0 |
| Revision | daab053ee433 |