import type { BUN_SQLITE_WGUI_CLIENT_RULES } from "@/db/types/db"; import type { ClientRuleProtocol, ClientRuleType } from "@/src/types"; import { v4 as uuidv4 } from "uuid"; export type ClientRuleDraft = { local_id: string; id?: number | ""; rule_type: ClientRuleType; destination?: string; ports?: string; protocol: ClientRuleProtocol; }; type CreateParams = Partial; export function createClientRuleDraft(params?: CreateParams): ClientRuleDraft { return { local_id: uuidv4(), rule_type: "destination", destination: "", ports: "", protocol: "any", ...params, }; } export function clientRuleToDraft({ rule, }: { rule: BUN_SQLITE_WGUI_CLIENT_RULES; }): ClientRuleDraft { return { local_id: String(rule.id || uuidv4()), id: rule.id, rule_type: rule.rule_type == "all" ? "all" : "destination", destination: rule.destination || "", ports: rule.ports || "", protocol: rule.protocol == "tcp" || rule.protocol == "udp" ? rule.protocol : "any", }; } export function clientRuleDraftToRecord({ draft, }: { draft: ClientRuleDraft; }): BUN_SQLITE_WGUI_CLIENT_RULES { return { ...(draft.id ? { id: draft.id } : {}), rule_type: draft.rule_type, destination: draft.destination || "", ports: draft.ports || "", protocol: draft.protocol, }; }