import {pito} from 'pito'; import {MoveInType} from '../enums'; export const MoveInDefine = pito .Uobj('type') .case(MoveInType.DateSelect, {date: pito.Datetime()}) .case(MoveInType.DateDiscussion, {}) .case(MoveInType.Immediately, {}) .end(); export type MoveInDefine = pito.Type; export namespace MoveIn { // TODO :타입 체크 export function wrap( type: MoveInType, date: Date | null | undefined, ): MoveInDefine { switch (type) { case MoveInType.DateSelect: if (date === undefined || date === null) { throw new Error(`MoveInType.DateSelect not allow undef or null date`); } return { type: MoveInType.DateSelect, date: date, }; case MoveInType.DateDiscussion: return { type: MoveInType.DateDiscussion, }; case MoveInType.Immediately: return { type: MoveInType.Immediately, }; default: throw new Error(`unknown move in type ${type}` ); } } export function unwrap(def: MoveInDefine): { type: MoveInType; date?: Date } { switch (def.type) { case MoveInType.DateSelect: return { type: MoveInType.DateSelect, date: new Date(def.date), }; default: return { type: def.type, }; } } export function unwrapUndef(def: MoveInDefine | undefined): { type?: MoveInType; date?: Date; } { if (def === undefined) { return {}; } return unwrap(def); } }