|
| 1 | +import type { temporal } from '@temporalio/proto'; |
1 | 2 | import { Payload } from '../interfaces'; |
2 | | -import { arrayFromPayloads, fromPayloadsAtIndex, toPayloads } from '../converter/payload-converter'; |
| 3 | +import { |
| 4 | + arrayFromPayloads, |
| 5 | + convertOptionalToPayload, |
| 6 | + fromPayloadsAtIndex, |
| 7 | + toPayloads, |
| 8 | +} from '../converter/payload-converter'; |
3 | 9 | import { PayloadConverterError } from '../errors'; |
4 | 10 | import { PayloadCodec } from '../converter/payload-codec'; |
5 | 11 | import { ProtoFailure } from '../failure'; |
6 | 12 | import { LoadedDataConverter } from '../converter/data-converter'; |
| 13 | +import { UserMetadata } from '../user-metadata'; |
7 | 14 | import { DecodedPayload, DecodedProtoFailure, EncodedPayload, EncodedProtoFailure } from './codec-types'; |
8 | 15 |
|
9 | 16 | /** |
@@ -359,3 +366,32 @@ export function noopDecodeMap<K extends string>( |
359 | 366 | ): Record<K, DecodedPayload> | null | undefined { |
360 | 367 | return map as Record<K, DecodedPayload> | null | undefined; |
361 | 368 | } |
| 369 | + |
| 370 | +export async function encodeUserMetadata( |
| 371 | + dataConverter: LoadedDataConverter, |
| 372 | + staticSummary: string | undefined, |
| 373 | + staticDetails: string | undefined |
| 374 | +): Promise<temporal.api.sdk.v1.IUserMetadata | undefined> { |
| 375 | + if (staticSummary == null && staticDetails == null) return undefined; |
| 376 | + |
| 377 | + const { payloadConverter, payloadCodecs } = dataConverter; |
| 378 | + const summary = await encodeOptionalSingle(payloadCodecs, convertOptionalToPayload(payloadConverter, staticSummary)); |
| 379 | + const details = await encodeOptionalSingle(payloadCodecs, convertOptionalToPayload(payloadConverter, staticDetails)); |
| 380 | + |
| 381 | + if (summary == null && details == null) return undefined; |
| 382 | + |
| 383 | + return { summary, details }; |
| 384 | +} |
| 385 | + |
| 386 | +export async function decodeUserMetadata( |
| 387 | + dataConverter: LoadedDataConverter, |
| 388 | + metadata: temporal.api.sdk.v1.IUserMetadata | undefined | null |
| 389 | +): Promise<UserMetadata> { |
| 390 | + const res = { staticSummary: undefined, staticDetails: undefined }; |
| 391 | + if (metadata == null) return res; |
| 392 | + |
| 393 | + const staticSummary = (await decodeOptionalSinglePayload<string>(dataConverter, metadata.summary)) ?? undefined; |
| 394 | + const staticDetails = (await decodeOptionalSinglePayload<string>(dataConverter, metadata.details)) ?? undefined; |
| 395 | + |
| 396 | + return { staticSummary, staticDetails }; |
| 397 | +} |
0 commit comments