fix: log levels for tryGet
This commit is contained in:
parent
0b8e3f3071
commit
c10a98ff35
|
|
@ -47,12 +47,12 @@ class RoomEncryptedContent {
|
|||
RoomEncryptedContent.fromJson(Map<String, dynamic> json)
|
||||
: algorithm = json.tryGet('algorithm') ?? '',
|
||||
senderKey = json.tryGet('sender_key') ?? '',
|
||||
deviceId = json.tryGet<String?>('device_id'),
|
||||
sessionId = json.tryGet<String?>('session_id'),
|
||||
ciphertextMegolm = json.silentTryGet('ciphertext'),
|
||||
deviceId = json.tryGet('device_id', TryGet.optional),
|
||||
sessionId = json.tryGet('session_id', TryGet.optional),
|
||||
ciphertextMegolm = json.tryGet('ciphertext', TryGet.silent),
|
||||
// filter out invalid/incomplete CiphertextInfos
|
||||
ciphertextOlm = json
|
||||
.silentTryGet<Map<String, dynamic>>('ciphertext')
|
||||
.tryGet<Map<String, dynamic>>('ciphertext', TryGet.silent)
|
||||
?.entries
|
||||
.map((e) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,9 @@ class RoomEncryptionContent {
|
|||
|
||||
RoomEncryptionContent.fromJson(Map<String, dynamic> json)
|
||||
: algorithm = json.tryGet('algorithm') ?? '',
|
||||
rotationPeriodMs = json.tryGet('rotation_period_ms'),
|
||||
rotationPeriodMsgs = json.tryGet('rotation_period_msgs');
|
||||
rotationPeriodMs = json.tryGet('rotation_period_ms', TryGet.optional),
|
||||
rotationPeriodMsgs =
|
||||
json.tryGet('rotation_period_msgs', TryGet.optional);
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final data = <String, dynamic>{};
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class RoomKeyRequestContent {
|
|||
|
||||
RoomKeyRequestContent.fromJson(Map<String, dynamic> json)
|
||||
: body = ((x) => x != null ? RequestedKeyInfo.fromJson(x) : null)(
|
||||
json.tryGet('body')),
|
||||
json.tryGet('body', TryGet.optional)),
|
||||
action = json.tryGet('action') ?? '',
|
||||
requestingDeviceId = json.tryGet('requesting_device_id') ?? '',
|
||||
requestId = json.tryGet('request_id') ?? '';
|
||||
|
|
|
|||
|
|
@ -38,12 +38,11 @@ class SecretStorageKeyContent {
|
|||
SecretStorageKeyContent();
|
||||
|
||||
SecretStorageKeyContent.fromJson(Map<String, dynamic> json)
|
||||
: passphrase = json['passphrase'] is Map<String, dynamic>
|
||||
? PassphraseInfo.fromJson(json['passphrase'])
|
||||
: null,
|
||||
iv = json.tryGet('iv'),
|
||||
mac = json.tryGet('mac'),
|
||||
algorithm = json.tryGet('algorithm');
|
||||
: passphrase = ((x) => x != null ? PassphraseInfo.fromJson(x) : null)(
|
||||
json.tryGet('passphrase', TryGet.optional)),
|
||||
iv = json.tryGet('iv', TryGet.optional),
|
||||
mac = json.tryGet('mac', TryGet.optional),
|
||||
algorithm = json.tryGet('algorithm', TryGet.optional);
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final data = <String, dynamic>{};
|
||||
|
|
@ -73,7 +72,7 @@ class PassphraseInfo {
|
|||
: algorithm = json.tryGet('algorithm'),
|
||||
salt = json.tryGet('salt'),
|
||||
iterations = json.tryGet('iterations'),
|
||||
bits = json.tryGet('bits');
|
||||
bits = json.tryGet('bits', TryGet.optional);
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final data = <String, dynamic>{};
|
||||
|
|
|
|||
|
|
@ -25,33 +25,54 @@ import 'dart:core';
|
|||
|
||||
import 'logs.dart';
|
||||
|
||||
extension TryGetMapExtension on Map<String, dynamic> {
|
||||
T? tryGet<T extends Object?>(String key) {
|
||||
final Object? value = this[key];
|
||||
if (value is! T) {
|
||||
Logs().w(
|
||||
'Expected "$T" in event content for the Key "$key" but got "${value.runtimeType}".');
|
||||
return null;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
abstract class TryGet {
|
||||
void call(String key, Type expected, Type actual);
|
||||
|
||||
static const TryGet required = _RequiredLog();
|
||||
static const TryGet optional = _OptionalLog();
|
||||
|
||||
/// Same as tryGet but without logging any warnings.
|
||||
/// This is helpful if you have a field that can mean multiple things on purpose.
|
||||
T? silentTryGet<T extends Object?>(String key) {
|
||||
static const TryGet silent = _SilentLog();
|
||||
}
|
||||
|
||||
class _RequiredLog implements TryGet {
|
||||
const _RequiredLog();
|
||||
@override
|
||||
void call(String key, Type expected, Type actual) => Logs().w(
|
||||
'Expected "$expected" in event content for the Key "$key" but got "$actual".');
|
||||
}
|
||||
|
||||
class _OptionalLog implements TryGet {
|
||||
const _OptionalLog();
|
||||
@override
|
||||
void call(String key, Type expected, Type actual) {
|
||||
if (actual != Null) {
|
||||
Logs().w(
|
||||
'Expected "$expected" in event content for the Key "$key" but got "$actual".');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class _SilentLog implements TryGet {
|
||||
const _SilentLog();
|
||||
@override
|
||||
void call(String key, Type expected, Type actual) {}
|
||||
}
|
||||
|
||||
extension TryGetMapExtension on Map<String, dynamic> {
|
||||
T? tryGet<T extends Object>(String key, [TryGet log = TryGet.required]) {
|
||||
final Object? value = this[key];
|
||||
if (value is! T) {
|
||||
log(key, T, value.runtimeType);
|
||||
return null;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
List<T>? tryGetList<T>(String key) {
|
||||
List<T>? tryGetList<T>(String key, [TryGet log = TryGet.required]) {
|
||||
final Object? value = this[key];
|
||||
if (value is! List) {
|
||||
Logs().w(
|
||||
'Expected "List<$T>" in event content for the key "$key" but got "${value.runtimeType}".',
|
||||
StackTrace.current);
|
||||
log(key, T, value.runtimeType);
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
|
|
@ -64,11 +85,10 @@ extension TryGetMapExtension on Map<String, dynamic> {
|
|||
}
|
||||
}
|
||||
|
||||
Map<A, B>? tryGetMap<A, B>(String key) {
|
||||
Map<A, B>? tryGetMap<A, B>(String key, [TryGet log = TryGet.required]) {
|
||||
final Object? value = this[key];
|
||||
if (value is! Map) {
|
||||
Logs().w(
|
||||
'Expected "Map<$A,$B>" in event content for the key "$key" but got "${value.runtimeType}".');
|
||||
log(key, <A, B>{}.runtimeType, value.runtimeType);
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
|
|
|
|||
Loading…
Reference in New Issue