export type ApiTrovoError = { code: string; message: string; }; export type ApiTrovoResponse = | { error: null; data: T } | { error: ApiTrovoError; data: null }; export type ApiTrovoQrSlotEmpty = { empty: true; uid: null; scanId: null }; export type ApiTrovoQrSlotFulfilled = { empty: false; uid: string; scanId: string; }; export type ApiTrovoQrSlot = IsEmpty extends true ? ApiTrovoQrSlotEmpty : IsEmpty extends false ? ApiTrovoQrSlotFulfilled : ApiTrovoQrSlotEmpty | ApiTrovoQrSlotFulfilled; export type ApiTrovoQrScan = { scanId: string; scannedAt: string; successful: boolean; }; export type ApiTrovoQr = { id: string; generatedAt: string; registeredAt: IsEmpty extends true ? null : IsEmpty extends false ? string : string | null; registeredBy: IsEmpty extends true ? null : IsEmpty extends false ? string : string | null; slots: [ ApiTrovoQrSlot, ApiTrovoQrSlot, ApiTrovoQrSlot, ApiTrovoQrSlot, ApiTrovoQrSlot ]; scans: IsEmpty extends true ? [] : IsEmpty extends false ? { 0: ApiTrovoQrScan } & ApiTrovoQrScan[] : ApiTrovoQrScan[]; };