diff --git a/src/LLTSharp/LLTParser.cs b/src/LLTSharp/LLTParser.cs index 68f45d3..cbd76f5 100644 --- a/src/LLTSharp/LLTParser.cs +++ b/src/LLTSharp/LLTParser.cs @@ -699,6 +699,7 @@ private static void DeclareMainRules(ParserBuilder builder) { var obj = v.GetValue(2); var metadata = new List(); + var additionalMetadata = new AdditionalMetadata(); foreach (var pair in obj.Dictionary) { @@ -717,11 +718,14 @@ private static void DeclareMainRules(ParserBuilder builder) metadata.Add(new VersionMetadata((int)((double)pair.Value.GetValue()))); break; default: - metadata.Add(new AdditionalMetadata(pair.Key, pair.Value.GetValue())); + additionalMetadata.Set(pair.Key, pair.Value.GetValue()); break; } } + if (additionalMetadata.Count > 0) + metadata.Add(additionalMetadata.ToImmutable()); + return new MetadataCollection(metadata); }); diff --git a/src/LLTSharp/LLTSharp.csproj b/src/LLTSharp/LLTSharp.csproj index 672e164..8383b61 100644 --- a/src/LLTSharp/LLTSharp.csproj +++ b/src/LLTSharp/LLTSharp.csproj @@ -8,7 +8,7 @@ LLTSharp - 1.2.0 + 1.2.1 Roman K. RomeCore LLTSharp diff --git a/src/LLTSharp/Metadata/IAdditionalMetadata.cs b/src/LLTSharp/Metadata/IAdditionalMetadata.cs index e2c81ca..4912e5d 100644 --- a/src/LLTSharp/Metadata/IAdditionalMetadata.cs +++ b/src/LLTSharp/Metadata/IAdditionalMetadata.cs @@ -10,13 +10,21 @@ namespace LLTSharp.Metadata /// public interface IAdditionalMetadata : IMetadata, IDynamicMetaObjectProvider { - } + /// + /// Gets the value associated with the specified key. + /// + /// The type to convert the value to. + /// The key of the value to get. + /// The converted value or default(T) if not found. + T Get(string key); - public static partial class MetadataExtensions - { - public static IAdditionalMetadata? TryGetAdditionalMetadata(this IMetadataProvider provider) - { - return provider.Metadata.TryGet(); - } + /// + /// Tries to get the value associated with the specified key. + /// + /// The type to convert the value to. + /// The key of the value to get. + /// When this method returns, contains the value if found; otherwise, default(T). + /// true if the key was found; otherwise, false. + bool TryGet(string key, out T value); } } \ No newline at end of file diff --git a/src/LLTSharp/Metadata/MetadataExtensions.cs b/src/LLTSharp/Metadata/MetadataExtensions.cs index c7c6c2e..bfc48f8 100644 --- a/src/LLTSharp/Metadata/MetadataExtensions.cs +++ b/src/LLTSharp/Metadata/MetadataExtensions.cs @@ -26,5 +26,18 @@ public static MetadataCollection ToMetadataCollection(this IEnumerable enu { return new MetadataCollection(enumerable.Cast()); } + + public static T? TryGetAdditional(this IMetadataCollection collection, string key) + { + foreach (var metadata in collection.GetAll()) + { + if (metadata.TryGet(key, out var result)) + { + return result; + } + } + + return default; + } } } \ No newline at end of file