Thank you for the great package.
factory IMap.fromJson(
Map<String, Object?> json,
K Function(Object?) fromJsonK,
V Function(Object?) fromJsonV,
) =>
json.map<K, V>(
// (key, value) => MapEntry(fromJsonK(_safeKeyFromJson<K>(key)), fromJsonV(value)))
(key, value) => MapEntry(fromJsonK(key), fromJsonV(value))).lockUnsafe;
void main() {
final TestMaps testMaps = TestMaps(
iMap: {DateTime(2023, 6, 25): 'IMap<DateTime,String>'}.lock,
map: {DateTime(2023, 6, 25): 'Map<DateTime,String>'},
iEnumMap: {TestEnum.testValue: 'IMap<Enum,String>'}.lock,
enumMap: {TestEnum.testValue: 'Map<Enum,String>'});
final Map<String, dynamic> json = testMaps.toJson();
final fromJsonTestMap = TestMaps.fromJson(json);
print('Output test Imap:\n ${fromJsonTestMap.toString()}');
}
```
_TestMaps:_
```
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'example.g.dart';
enum TestEnum {
testValue,
}
@JsonSerializable()
class TestMaps {
/// The generated code assumes these values exist in JSON.
final IMap<DateTime, String> iMap;
final IMap<TestEnum, String> iEnumMap;
final Map<DateTime, String> map;
final Map<TestEnum, String> enumMap;
TestMaps(
{required this.iMap,
required this.map,
required this.iEnumMap,
required this.enumMap});
/// Connect the generated [_$PersonFromJson] function to the `fromJson`
/// factory.
factory TestMaps.fromJson(Map<String, dynamic> json) =>
_$TestMapsFromJson(json);
/// Connect the generated [_$PersonToJson] function to the `toJson` method.
Map<String, dynamic> toJson() => _$TestMapsToJson(this);
@override
String toString() {
return 'TestMaps(iMap: $iMap, iEnumMap: $iEnumMap, map: $map, enumMap: $enumMap)';
}
}
```
```
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'example.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
TestMaps _$TestMapsFromJson(Map<String, dynamic> json) => TestMaps(
iMap: IMap<DateTime, String>.fromJson(
json['iMap'] as Map<String, dynamic>,
(value) => DateTime.parse(value as String),
(value) => value as String),
map: (json['map'] as Map<String, dynamic>).map(
(k, e) => MapEntry(DateTime.parse(k), e as String),
),
iEnumMap: IMap<TestEnum, String>.fromJson(
json['iEnumMap'] as Map<String, dynamic>,
(value) => $enumDecode(_$TestEnumEnumMap, value),
(value) => value as String),
enumMap: (json['enumMap'] as Map<String, dynamic>).map(
(k, e) => MapEntry($enumDecode(_$TestEnumEnumMap, k), e as String),
),
);
Map<String, dynamic> _$TestMapsToJson(TestMaps instance) => <String, dynamic>{
'iMap': instance.iMap.toJson(
(value) => value.toIso8601String(),
(value) => value,
),
'iEnumMap': instance.iEnumMap.toJson(
(value) => _$TestEnumEnumMap[value]!,
(value) => value,
),
'map': instance.map.map((k, e) => MapEntry(k.toIso8601String(), e)),
'enumMap':
instance.enumMap.map((k, e) => MapEntry(_$TestEnumEnumMap[k]!, e)),
};
const _$TestEnumEnumMap = {
TestEnum.testValue: 'testValue',
};
```