const rendered = match(result, {
completed: (r) => `OK: ${r.data.media_buy_id}`,
failed: (r) => `Error: ${r.adcpError?.code ?? r.error}`,
'governance-denied': (r) => `Denied: ${r.error}`,
submitted: (r) => `Pending: ${r.metadata.taskId}`,
'input-required': (r) => `Input: ${r.metadata.inputRequest?.question}`,
working: (r) => `Working: ${r.metadata.taskId}`,
deferred: (r) => `Deferred: ${r.deferred?.token}`,
});
Exhaustive pattern match on a TaskResult's status discriminant.
Each handler receives the variant narrowed to its status, so data,
error, adcpError, deferred, and submitted are correctly typed
without manual if (result.status === ...) guards.
const rendered = match(result, {
completed: (r) => `OK: ${r.data.media_buy_id}`,
failed: (r) => `Error: ${r.adcpError?.code ?? r.error}`,
'governance-denied': (r) => `Denied: ${r.error}`,
submitted: (r) => `Pending: ${r.metadata.taskId}`,
'input-required': (r) => `Input: ${r.metadata.inputRequest?.question}`,
working: (r) => `Working: ${r.metadata.taskId}`,
deferred: (r) => `Deferred: ${r.deferred?.token}`,
});
Exhaustive pattern match on a TaskResult's
statusdiscriminant.Each handler receives the variant narrowed to its status, so
data,error,adcpError,deferred, andsubmittedare correctly typed without manualif (result.status === ...)guards.