📝 Todo : ** dont treat as an exception **
Description:
Code Snippet:
// ---------------------------------------------------------------------------------------------------------------------
// Imports
// ---------------------------------------------------------------------------------------------------------------------
using InfiniLore.InfiniBlazor.Pooling;
using Microsoft.Extensions.Logging;
using System.Collections.Frozen;
using System.Diagnostics.CodeAnalysis;
using System.Text;
namespace InfiniLore.InfiniBlazor.Markdown.Parsers.MarkdownString.Deserializer;
// ---------------------------------------------------------------------------------------------------------------------
// Code
// ---------------------------------------------------------------------------------------------------------------------
public class MarkdownStringMdSyntaxDeserializer(ILogger<MarkdownStringMdSyntaxDeserializer> logger) : IMarkdownStringMdSyntaxDeserializer {
public FrozenDictionary<Type, IMarkdownStringMdSyntaxNodeDeserializer> Deserializers { get; internal set; } = null!;
// -----------------------------------------------------------------------------------------------------------------
// Methods
// -----------------------------------------------------------------------------------------------------------------
public string DeserializeToString(IMdSyntaxTree tree) {
StringBuilder builder = GlobalPools.StringBuilder.Get();
try {
foreach (IMdSyntaxNode node in tree.VisitTopLevelNodes()) {
if (!TryGetNodeDeserializer(node, out IMarkdownStringMdSyntaxNodeDeserializer? deserializer)) continue;
deserializer.Deserialize(node, builder);
}
return builder.ToString();
}
finally {
GlobalPools.StringBuilder.Return(builder);
}
}
// ReSharper disable once ConvertIfStatementToReturnStatement
public bool TryGetNodeDeserializer(IMdSyntaxNode node, [NotNullWhen(true)] out IMarkdownStringMdSyntaxNodeDeserializer? deserializer) {
if (Deserializers.TryGetValue(node.Type, out deserializer)) return true;
logger.Error("No deserializer found for node type {NodeType}", node.Type);
throw new InvalidOperationException($"No deserializer found for node type {node.Type}"); // TODO dont treat as an exception
}
}
File:
https://github.com/InfiniLore/infinilore.infiniblazor/blob/bb5a2e0110e2ca9b2f0464d1e05e7158c003d51a/src/InfiniLore.InfiniBlazor/Services/Markdown/Parsers/MarkdownString/Deserializer/MarkdownStringMdSyntaxDeserializer.cs#L42
📝 Todo : ** dont treat as an exception **
Description:
Code Snippet:
File:
https://github.com/InfiniLore/infinilore.infiniblazor/blob/bb5a2e0110e2ca9b2f0464d1e05e7158c003d51a/src/InfiniLore.InfiniBlazor/Services/Markdown/Parsers/MarkdownString/Deserializer/MarkdownStringMdSyntaxDeserializer.cs#L42