import type { MaybePromiseLike } from "@yume-chan/async"; import type { FieldByobSerializeContext, FieldDeserializer, FieldSerializer, } from "./field/index.js"; import type { AsyncExactReadable, ExactReadable } from "./readable.js"; export type StructSerializeContext = Omit< FieldByobSerializeContext, "littleEndian" >; export interface StructSerializer extends FieldSerializer { serialize(source: T): Uint8Array; serialize(source: T, buffer: Uint8Array): number; serialize(source: T, context: StructSerializeContext): number; } export type StructInit> = T extends StructSerializer ? U : never; export interface StructDeserializer extends FieldDeserializer { size: number; deserialize(reader: ExactReadable): T; deserialize(reader: AsyncExactReadable): MaybePromiseLike; } export type StructValue> = T extends StructDeserializer ? P : never; export type StructLike = StructSerializer & StructDeserializer;