diff --git a/src/generators/Silk.NET.SilkTouch.Scraper/ClangScraper.cs b/src/generators/Silk.NET.SilkTouch.Scraper/ClangScraper.cs
index d4cc68a5fd..d8676e96d5 100644
--- a/src/generators/Silk.NET.SilkTouch.Scraper/ClangScraper.cs
+++ b/src/generators/Silk.NET.SilkTouch.Scraper/ClangScraper.cs
@@ -35,7 +35,7 @@ public sealed class ClangScraper
/// Any number of symbols scraped from the given xml
public IEnumerable ScrapeXML(XmlDocument document)
{
- var bindings = document.ChildNodes.Cast().FirstOrDefault(x => x.LocalName == "bindings" && x is XmlElement) as XmlElement;
+ var bindings = document.ChildNodes.Cast().OfType().FirstOrDefault();
if (bindings is null)
{
diff --git a/src/generators/Silk.NET.SilkTouch.Scraper/XmlVisitor.cs b/src/generators/Silk.NET.SilkTouch.Scraper/XmlVisitor.cs
index bddf336a00..39d84ec8ee 100644
--- a/src/generators/Silk.NET.SilkTouch.Scraper/XmlVisitor.cs
+++ b/src/generators/Silk.NET.SilkTouch.Scraper/XmlVisitor.cs
@@ -21,6 +21,8 @@ public IEnumerable Visit(XmlNode node)
return VisitBinding(bindings);
case XmlElement { Name: "namespace" } @namespace:
return VisitNamespace(@namespace);
+ case XmlElement { Name: "struct" } @struct:
+ return VisitStruct(@struct);
default:
{
throw new NotImplementedException();
@@ -28,6 +30,18 @@ public IEnumerable Visit(XmlNode node)
}
}
+ private IEnumerable VisitStruct(XmlElement @struct)
+ {
+ return new[]
+ {
+ new StructSymbol
+ (
+ new IdentifierSymbol(@struct.Attributes?["name"]?.Value ?? throw new InvalidOperationException()),
+ StructLayout.Empty
+ )
+ };
+ }
+
private IEnumerable VisitBinding(XmlElement bindings)
{
return bindings.ChildNodes.Cast().Where(x => x is not null).SelectMany(Visit);
diff --git a/tests/Silk.NET.SilkTouch.Scraper.Tests/StructScrapingTests.cs b/tests/Silk.NET.SilkTouch.Scraper.Tests/StructScrapingTests.cs
index 56512c68cf..cafff02d74 100644
--- a/tests/Silk.NET.SilkTouch.Scraper.Tests/StructScrapingTests.cs
+++ b/tests/Silk.NET.SilkTouch.Scraper.Tests/StructScrapingTests.cs
@@ -1,6 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using System.Xml;
+using Silk.NET.SilkTouch.Symbols;
using Xunit;
namespace Silk.NET.SilkTouch.Scraper.Tests;
@@ -10,6 +12,25 @@ public class StructScrapingTests
[Fact]
public void StructXMLGeneratesStructSymbol()
{
+ var doc = new XmlDocument();
+ doc.LoadXml(@"");
+ var symbols = new ClangScraper().ScrapeXML(doc);
+
+ var symbol = Assert.Single(symbols);
+ var @struct = Assert.IsType(symbol);
+ }
+
+ [Fact]
+ public void StructXMLGeneratesCorrectIdentifier()
+ {
+ var doc = new XmlDocument();
+ doc.LoadXml(@"");
+
+ var symbols = new ClangScraper().ScrapeXML(doc);
+
+ var symbol = Assert.Single(symbols);
+ var @struct = Assert.IsType(symbol);
+ Assert.Equal("Test", @struct.Identifier.Value);
}
}