Skip to content

Commit 8c0331c

Browse files
Add support for serialization of ImmutableHashSet
1 parent 67cb8e8 commit 8c0331c

File tree

4 files changed

+21
-0
lines changed

4 files changed

+21
-0
lines changed

Nitra/Nitra.Compiler/Generation/Serialization/CollectionTypeSerializationBuilder.n

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ namespace Nitra.Serialization
6161
buffer.Add($readItem); ]>);
6262
body.Add(<[ buffer.MoveToImmutable() ]>);
6363

64+
| ImmutableHashSet =>
65+
body.Add(<[ def buffer = System.Collections.Immutable.ImmutableHashSet.CreateBuilder(); ]>);
66+
body.Add(<[ repeat (count)
67+
buffer.Add($readItem); ]>);
68+
body.Add(<[ buffer.MoveToImmutable() ]>);
69+
6470
| NemerleList with result = <[ Nemerle.Collections.NList.FromArray(buffer) ]>
6571
| IReadOnlyCollection with result = <[ System.Collections.ObjectModel.ReadOnlyCollection(buffer) ]>
6672
| IReadOnlyList with result = <[ System.Collections.ObjectModel.ReadOnlyCollection(buffer) ]>

Nitra/Nitra.Compiler/Generation/Serialization/DefaultTypeSerializationFactory.n

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ namespace Nitra.Serialization
2424
| IImmutableList
2525
| IReadOnlyCollection
2626
| IReadOnlyList
27+
| ImmutableHashSet
2728
}
2829

2930
public override CreateBuilder(compiler : SerializationCompiler, type : FixedType) : TypeSerializationBuilder
@@ -37,6 +38,7 @@ namespace Nitra.Serialization
3738
| Class(ti, [itemType]) when ti.Equals(typeCatalog.Generic_IList_tc) => CreateCollectionBuilder(compiler, CollectionType.IList, type, itemType)
3839
| Class(ti, [itemType]) when ti.Equals(typeCatalog.Generic_ICollection_tc) => CreateCollectionBuilder(compiler, CollectionType.ICollection, type, itemType)
3940
| Class(ti, [itemType]) when ti.Equals(typeCatalog.Generic_IEnumerable_tc) => CreateCollectionBuilder(compiler, CollectionType.IEnumerable, type, itemType)
41+
| Class(ti, [itemType]) when EqualsOption(ti, compiler.ImmutableHashSetOpt) => CreateCollectionBuilder(compiler, CollectionType.ImmutableHashSet, type, itemType)
4042
| Class(ti, [itemType]) when EqualsOption(ti, compiler.ImmutableArrayOpt) => CreateCollectionBuilder(compiler, CollectionType.ImmutableArray, type, itemType)
4143
| Class(ti, [itemType]) when EqualsOption(ti, compiler.IImmutableListOpt) => CreateCollectionBuilder(compiler, CollectionType.IImmutableList, type, itemType)
4244
| Class(ti, [itemType]) when EqualsOption(ti, compiler.IReadOnlyCollectionOpt) => CreateCollectionBuilder(compiler, CollectionType.IReadOnlyCollection, type, itemType)

Nitra/Nitra.Compiler/Generation/Serialization/NitraTypeSerializationFactory.n

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ namespace Nitra.Serialization
143143
{
144144
| NemerleList => <[ Nemerle.Collections.NCollectionsExtensions.NToList($expr) ]>
145145
| ImmutableArray => <[ System.Collections.Immutable.ImmutableArray.Create($expr) ]>
146+
| ImmutableHashSet => <[ System.Collections.Immutable.ImmutableHashSet.Create($expr) ]>
146147
| _ => expr
147148
}
148149
}

Nitra/Nitra.Compiler/Generation/Serialization/SerializationCompiler.n

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ namespace Nitra.Serialization
4848
}
4949
}
5050

51+
public ImmutableHashSetOpt : option[TypeInfo]
52+
{
53+
mutable _immutableHashSetOpt : option[TypeInfo];
54+
get
55+
{
56+
when (_immutableHashSetOpt : object == null)
57+
_immutableHashSetOpt = Manager.NameTree.LookupExactType("System.Collections.Immutable.ImmutableHashSet", 1);
58+
_immutableHashSetOpt
59+
}
60+
}
61+
62+
5163
public ImmutableArrayOpt : option[TypeInfo]
5264
{
5365
mutable _immutableArrayOpt : option[TypeInfo];

0 commit comments

Comments
 (0)