import {pito} from 'pito'; // 주차 가능/불가능에 따른 구조체 export const ParkingDefine = pito.Uobj('yn') .case('y', ({count: pito.Int()})) .case('n', ({})) .end(); export type ParkingDefine = pito.Type; export namespace Parking { export function wrap(yn: string | boolean | number, count: number | undefined | null): ParkingDefine { if (yn === 'y' || yn === 1 || yn === true) { if (typeof count !== 'number') { throw new Error(`Parking.wrap 실패 : count가 잘못된 값임니다(number가 아님), count = ${count}`); } return { yn : 'y', count: count, }; } else { return { yn: 'n', }; } } export function unwrap(def: ParkingDefine): { yn: 'y' | 'n', count?: number } { if (def.yn === 'y') { return { yn : 'y', count: def.count, }; } else { return { yn: 'n', }; } } export function unwrapUndef(def: ParkingDefine| undefined): { yn?: 'y' | 'n', count?: number } { if (def === undefined) { return {}; } return unwrap(def); } }