decode method
Decodes a JSON-compatible wire value.
Implementation
@override
DiffChange decode(Object? value) {
final payload = decodeAcpObject(value);
final tag = decodeAcpString(payload['operation']);
switch (tag) {
case 'add':
final decoder = AcpResilientDecoder(payload);
return DiffChangeAdd(
diffPathChangeCodec.decode(payload),
fileType: decoder
.optionalOnError(
'fileType',
(value) => diffFileTypeCodec.decode(value),
)
.valueOrNull,
mimeType: decoder
.optionalOnError(
'mimeType',
(value) => mediaTypeCodec.decode(value),
)
.valueOrNull,
meta: decoder.meta(),
);
case 'delete':
final decoder = AcpResilientDecoder(payload);
return DiffChangeDelete(
diffPathChangeCodec.decode(payload),
fileType: decoder
.optionalOnError(
'fileType',
(value) => diffFileTypeCodec.decode(value),
)
.valueOrNull,
mimeType: decoder
.optionalOnError(
'mimeType',
(value) => mediaTypeCodec.decode(value),
)
.valueOrNull,
meta: decoder.meta(),
);
case 'modify':
final decoder = AcpResilientDecoder(payload);
return DiffChangeModify(
diffPathChangeCodec.decode(payload),
fileType: decoder
.optionalOnError(
'fileType',
(value) => diffFileTypeCodec.decode(value),
)
.valueOrNull,
mimeType: decoder
.optionalOnError(
'mimeType',
(value) => mediaTypeCodec.decode(value),
)
.valueOrNull,
meta: decoder.meta(),
);
case 'move':
final decoder = AcpResilientDecoder(payload);
return DiffChangeMove(
diffPathPairChangeCodec.decode(payload),
fileType: decoder
.optionalOnError(
'fileType',
(value) => diffFileTypeCodec.decode(value),
)
.valueOrNull,
mimeType: decoder
.optionalOnError(
'mimeType',
(value) => mediaTypeCodec.decode(value),
)
.valueOrNull,
meta: decoder.meta(),
);
case 'copy':
final decoder = AcpResilientDecoder(payload);
return DiffChangeCopy(
diffPathPairChangeCodec.decode(payload),
fileType: decoder
.optionalOnError(
'fileType',
(value) => diffFileTypeCodec.decode(value),
)
.valueOrNull,
mimeType: decoder
.optionalOnError(
'mimeType',
(value) => mediaTypeCodec.decode(value),
)
.valueOrNull,
meta: decoder.meta(),
);
default:
return DiffChangeCustom(
discriminator: tag,
payload: AcpJsonObject.fromObject(payload),
);
}
}