mirror of
https://github.com/denoland/std.git
synced 2024-11-21 20:50:22 +00:00
103 lines
3.6 KiB
TypeScript
103 lines
3.6 KiB
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
|
|
import type { CborStreamInput, CborStreamOutput, CborType } from "./types.ts";
|
|
|
|
/**
|
|
* Represents a CBOR tag, which pairs a tag number with content, used to convey
|
|
* additional semantic information in CBOR-encoded data.
|
|
* [CBOR Tags](https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml).
|
|
*
|
|
* @example Usage
|
|
* ```ts
|
|
* import { assert, assertEquals } from "@std/assert";
|
|
* import { CborTag, decodeCbor, encodeCbor } from "@std/cbor";
|
|
* import { decodeBase64Url, encodeBase64Url } from "@std/encoding";
|
|
*
|
|
* const rawMessage = new TextEncoder().encode("Hello World");
|
|
*
|
|
* const encodedMessage = encodeCbor(
|
|
* new CborTag(
|
|
* 33, // TagNumber 33 specifies the tagContent must be a valid "base64url" "string".
|
|
* encodeBase64Url(rawMessage),
|
|
* ),
|
|
* );
|
|
*
|
|
* const decodedMessage = decodeCbor(encodedMessage);
|
|
*
|
|
* assert(decodedMessage instanceof CborTag);
|
|
* assert(typeof decodedMessage.tagContent === "string");
|
|
* assertEquals(decodeBase64Url(decodedMessage.tagContent), rawMessage);
|
|
* ```
|
|
*
|
|
* @typeParam T The type of the tag's content, which can be a
|
|
* {@link CborType}, {@link CborStreamInput}, or {@link CborStreamOutput}.
|
|
*/
|
|
export class CborTag<T extends CborType | CborStreamInput | CborStreamOutput> {
|
|
/**
|
|
* A {@link number} or {@link bigint} representing the CBOR tag number, used
|
|
* to identify the type of the tagged content.
|
|
* [CBOR Tags](https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml).
|
|
*
|
|
* @example Usage
|
|
* ```ts
|
|
* import { assert, assertEquals } from "@std/assert";
|
|
* import { CborTag, decodeCbor, encodeCbor } from "@std/cbor";
|
|
* import { decodeBase64Url, encodeBase64Url } from "@std/encoding";
|
|
*
|
|
* const rawMessage = new TextEncoder().encode("Hello World");
|
|
*
|
|
* const encodedMessage = encodeCbor(
|
|
* new CborTag(
|
|
* 33, // TagNumber 33 specifies the tagContent must be a valid "base64url" "string".
|
|
* encodeBase64Url(rawMessage),
|
|
* ),
|
|
* );
|
|
*
|
|
* const decodedMessage = decodeCbor(encodedMessage);
|
|
*
|
|
* assert(decodedMessage instanceof CborTag);
|
|
* assert(typeof decodedMessage.tagContent === "string");
|
|
* assertEquals(decodeBase64Url(decodedMessage.tagContent), rawMessage);
|
|
* ```
|
|
*/
|
|
tagNumber: number | bigint;
|
|
/**
|
|
* The content associated with the tag of type {@link T}.
|
|
* [CBOR Tags](https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml).
|
|
*
|
|
* @example Usage
|
|
* ```ts
|
|
* import { assert, assertEquals } from "@std/assert";
|
|
* import { CborTag, decodeCbor, encodeCbor } from "@std/cbor";
|
|
* import { decodeBase64Url, encodeBase64Url } from "@std/encoding";
|
|
*
|
|
* const rawMessage = new TextEncoder().encode("Hello World");
|
|
*
|
|
* const encodedMessage = encodeCbor(
|
|
* new CborTag(
|
|
* 33, // TagNumber 33 specifies the tagContent must be a valid "base64url" "string".
|
|
* encodeBase64Url(rawMessage),
|
|
* ),
|
|
* );
|
|
*
|
|
* const decodedMessage = decodeCbor(encodedMessage);
|
|
*
|
|
* assert(decodedMessage instanceof CborTag);
|
|
* assert(typeof decodedMessage.tagContent === "string");
|
|
* assertEquals(decodeBase64Url(decodedMessage.tagContent), rawMessage);
|
|
* ```
|
|
*/
|
|
tagContent: T;
|
|
/**
|
|
* Constructs a new instance.
|
|
*
|
|
* @param tagNumber A {@link number} or {@link bigint} representing the CBOR
|
|
* tag number, used to identify the type of the tagged content.
|
|
* @param tagContent The content associated with the tag of type {@link T}.
|
|
*/
|
|
constructor(tagNumber: number | bigint, tagContent: T) {
|
|
this.tagNumber = tagNumber;
|
|
this.tagContent = tagContent;
|
|
}
|
|
}
|