ox
Version:
Ethereum Standard Library
99 lines (94 loc) • 4.48 kB
text/typescript
/* eslint-disable jsdoc-js/require-jsdoc, jsdoc-js/require-description, jsdoc-js/require-example */
import * as core_Hex from '../core/Hex.js'
import {
decodeInteger,
intBigint,
intNumber,
quantityHex,
type SmallBits,
uintBigint,
} from './internal/Integer.js'
import * as z from 'zod/mini'
/** Unsized integer decoded as `bigint` and encoded as hex. */
export const Int = z.codec(quantityHex(), uintBigint(), {
decode: (value) => core_Hex.toBigInt(value),
encode: (value) => core_Hex.fromNumber(value),
})
/** 8-bit signed integer decoded as `number` and encoded as hex. */
export const Int8 = signed(8)
/** 16-bit signed integer decoded as `number` and encoded as hex. */
export const Int16 = signed(16)
/** 24-bit signed integer decoded as `number` and encoded as hex. */
export const Int24 = signed(24)
/** 32-bit signed integer decoded as `number` and encoded as hex. */
export const Int32 = signed(32)
/** 40-bit signed integer decoded as `number` and encoded as hex. */
export const Int40 = signed(40)
/** 48-bit signed integer decoded as `number` and encoded as hex. */
export const Int48 = signed(48)
/** 56-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int56 = signedBigint(56)
/** 64-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int64 = signedBigint(64)
/** 72-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int72 = signedBigint(72)
/** 80-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int80 = signedBigint(80)
/** 88-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int88 = signedBigint(88)
/** 96-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int96 = signedBigint(96)
/** 104-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int104 = signedBigint(104)
/** 112-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int112 = signedBigint(112)
/** 120-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int120 = signedBigint(120)
/** 128-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int128 = signedBigint(128)
/** 136-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int136 = signedBigint(136)
/** 144-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int144 = signedBigint(144)
/** 152-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int152 = signedBigint(152)
/** 160-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int160 = signedBigint(160)
/** 168-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int168 = signedBigint(168)
/** 176-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int176 = signedBigint(176)
/** 184-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int184 = signedBigint(184)
/** 192-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int192 = signedBigint(192)
/** 200-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int200 = signedBigint(200)
/** 208-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int208 = signedBigint(208)
/** 216-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int216 = signedBigint(216)
/** 224-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int224 = signedBigint(224)
/** 232-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int232 = signedBigint(232)
/** 240-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int240 = signedBigint(240)
/** 248-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int248 = signedBigint(248)
/** 256-bit signed integer decoded as `bigint` and encoded as hex. */
export const Int256 = signedBigint(256)
function signed(bits: SmallBits) {
return z.codec(quantityHex(bits), intNumber(bits), {
decode: (value) => globalThis.Number(decodeInteger(value, bits, true)),
encode: (value) =>
core_Hex.fromNumber(value, { signed: true, size: bits / 8 }),
})
}
function signedBigint(bits: number) {
return z.codec(quantityHex(bits), intBigint(bits), {
decode: (value) => decodeInteger(value, bits, true),
encode: (value) =>
core_Hex.fromNumber(value, { signed: true, size: bits / 8 }),
})
}