Skip to content

dont treat as an exception #79

@github-actions

Description

@github-actions

📝 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions