decode method

  1. @override
SessionConfigOption decode(
  1. Object? value
)
override

Decodes a JSON-compatible wire value.

Implementation

@override
SessionConfigOption decode(Object? value) {
  final payload = decodeAcpObject(value);
  final tag = decodeAcpString(payload['type']);
  switch (tag) {
    case 'select':
      final decoder = AcpResilientDecoder(payload);
      return SessionConfigOptionSelect(
        sessionConfigSelectCodec.decode(payload),
        configId: decoder.required(
          'configId',
          (value) => sessionConfigIdCodec.decode(value),
        ),
        name: decoder.required('name', (value) => decodeAcpString(value)),
        description: decoder
            .optionalOnError('description', (value) => decodeAcpString(value))
            .valueOrNull,
        category: decoder
            .optionalOnError(
              'category',
              (value) => sessionConfigOptionCategoryCodec.decode(value),
            )
            .valueOrNull,
        meta: decoder.meta(),
      );
    case 'boolean':
      final decoder = AcpResilientDecoder(payload);
      return SessionConfigOptionBoolean(
        sessionConfigBooleanCodec.decode(payload),
        configId: decoder.required(
          'configId',
          (value) => sessionConfigIdCodec.decode(value),
        ),
        name: decoder.required('name', (value) => decodeAcpString(value)),
        description: decoder
            .optionalOnError('description', (value) => decodeAcpString(value))
            .valueOrNull,
        category: decoder
            .optionalOnError(
              'category',
              (value) => sessionConfigOptionCategoryCodec.decode(value),
            )
            .valueOrNull,
        meta: decoder.meta(),
      );
    default:
      final decoder = AcpResilientDecoder(payload);
      decoder.required(
        'configId',
        (value) => sessionConfigIdCodec.decode(value),
      );
      decoder.required('name', (value) => decodeAcpString(value));
      return SessionConfigOptionCustom(
        discriminator: tag,
        payload: AcpJsonObject.fromObject(payload),
      );
  }
}