import { BcsType } from '@mysten/sui/bcs'; import type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client'; import { FieldsWithTypes } from './util'; export { vector } from './vector'; export interface StructClass { readonly $typeName: string; readonly $fullTypeName: string; readonly $typeArgs: string[]; readonly $isPhantom: readonly boolean[]; toJSONField(): Record; toJSON(): Record; __StructClass: true; } export interface VectorClass { readonly $typeName: 'vector'; readonly $fullTypeName: string; readonly $typeArgs: [string]; readonly $isPhantom: readonly [false]; toJSONField(): any[]; toJSON(): Record; readonly elements: any; __VectorClass: true; } export interface EnumVariantClass { readonly $typeName: string; readonly $fullTypeName: string; readonly $variantName: string; readonly $typeArgs: string[]; readonly $isPhantom: readonly boolean[]; toJSONField(): Record; toJSON(): Record; __EnumVariantClass: true; } export type Primitive = 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'address'; export type TypeArgument = StructClass | Primitive | VectorClass | EnumVariantClass; export interface StructClassReified { typeName: T['$typeName']; fullTypeName: ToTypeStr; typeArgs: T['$typeArgs']; isPhantom: T['$isPhantom']; reifiedTypeArgs: Array | PhantomReified>; bcs: BcsType; fromFields(fields: Record): T; fromFieldsWithTypes(item: FieldsWithTypes): T; fromBcs(data: Uint8Array): T; fromJSONField: (field: any) => T; fromJSON: (json: Record) => T; fromCoreObject: (obj: SuiClientTypes.Object<{ content: true; }>) => T; fetch: (client: ClientWithCoreApi, id: string) => Promise; new: (fields: Fields) => T; kind: 'StructClassReified'; } export interface VectorClassReified { typeName: T['$typeName']; fullTypeName: ToTypeStr; typeArgs: T['$typeArgs']; isPhantom: readonly [false]; reifiedTypeArgs: Array>; bcs: BcsType; fromFields(fields: any[]): T; fromFieldsWithTypes(item: FieldsWithTypes): T; fromBcs(data: Uint8Array): T; fromJSONField: (field: any) => T; fromJSON: (json: Record) => T; new: (elements: Elements) => T; kind: 'VectorClassReified'; } export interface EnumClassReified { typeName: T['$typeName']; fullTypeName: T['$fullTypeName']; typeArgs: T['$typeArgs']; isPhantom: T['$isPhantom']; reifiedTypeArgs: Array | PhantomReified>; bcs: BcsType; fromFields(fields: Record): T; fromFieldsWithTypes(item: FieldsWithTypes): T; fromBcs(data: Uint8Array): T; fromJSONField: (field: any) => T; fromJSON: (json: Record) => T; new: (variant: string, fields: Fields) => T; kind: 'EnumClassReified'; } export type Reified = T extends Primitive ? Primitive : T extends StructClass ? StructClassReified : T extends VectorClass ? VectorClassReified : T extends EnumVariantClass ? EnumClassReified : never; export type ToTypeArgument | VectorClassReified | EnumClassReified> = T extends Primitive ? T : T extends StructClassReified ? U : T extends VectorClassReified ? U : T extends EnumClassReified ? U : never; export type ToPhantomTypeArgument> = T extends PhantomReified ? U : never; export type PhantomTypeArgument = string; export interface PhantomReified

{ readonly phantomType: P; kind: 'PhantomReified'; } export declare function phantom>(reified: T): PhantomReified>>; export declare function phantom

(phantomType: P): PhantomReified

; export type ToTypeStr = T extends Primitive ? T : T extends StructClass ? T['$fullTypeName'] : T extends VectorClass ? T['$fullTypeName'] : never; export type PhantomToTypeStr = T extends PhantomTypeArgument ? T : never; export type ToJSON = T extends 'bool' ? boolean : T extends 'u8' ? number : T extends 'u16' ? number : T extends 'u32' ? number : T extends 'u64' ? string : T extends 'u128' ? string : T extends 'u256' ? string : T extends 'address' ? string : T extends { $typeName: '0x1::string::String'; } ? string : T extends { $typeName: '0x1::ascii::String'; } ? string : T extends { $typeName: '0x2::object::UID'; } ? string : T extends { $typeName: '0x2::object::ID'; } ? string : T extends { $typeName: '0x2::url::Url'; } ? string : T extends { $typeName: '0x1::type_name::TypeName'; } ? string : T extends { $typeName: '0x1::option::Option'; __inner: infer U extends TypeArgument; } ? ToJSON | null : T extends VectorClass ? ReturnType : T extends StructClass ? ReturnType : T extends EnumVariantClass ? ReturnType : never; export type ToField = T extends 'bool' ? boolean : T extends 'u8' ? number : T extends 'u16' ? number : T extends 'u32' ? number : T extends 'u64' ? bigint : T extends 'u128' ? bigint : T extends 'u256' ? bigint : T extends 'address' ? string : T extends { $typeName: '0x1::string::String'; } ? string : T extends { $typeName: '0x1::ascii::String'; } ? string : T extends { $typeName: '0x2::object::UID'; } ? string : T extends { $typeName: '0x2::object::ID'; } ? string : T extends { $typeName: '0x2::url::Url'; } ? string : T extends { $typeName: '0x1::type_name::TypeName'; } ? string : T extends { $typeName: '0x1::option::Option'; __inner: infer U extends TypeArgument; } ? ToField | null : T extends VectorClass ? T['elements'] : T extends StructClass ? T : T extends EnumVariantClass ? T : never; export declare function toBcs>(arg: T): BcsType; export declare function extractType>(reified: T): ToTypeStr>; export declare function extractType>(reified: T): PhantomToTypeStr>; export declare function extractType | PhantomReified>(reified: T): string; export declare function decodeFromFields(reified: Reified, field: any): any; export declare function decodeFromFieldsWithTypes(reified: Reified, item: any): any; export declare function assertReifiedTypeArgsMatch(fullType: string, typeArgs: string[], reifiedTypeArgs: Array | PhantomReified>): void; export declare function assertFieldsWithTypesArgsMatch(item: FieldsWithTypes, reifiedTypeArgs: Array | PhantomReified>): void; export declare function fieldToJSON(type: string, field: ToField): ToJSON; export declare function decodeFromJSONField(typeArg: Reified, field: any): any;