--- /dev/null
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using Questionable.Model.Questing;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+using static Questionable.QuestPathGenerator.RoslynShortcuts;
+
+namespace Questionable.QuestPathGenerator.RoslynElements;
+
+internal static class PurchaseMenuExtensions
+{
+    public static ExpressionSyntax ToExpressionSyntax(this PurchaseMenu purchaseMenu)
+    {
+        PurchaseMenu emptyMenu = new();
+        return ObjectCreationExpression(
+                IdentifierName(nameof(PurchaseMenu)))
+            .WithInitializer(
+                InitializerExpression(
+                    SyntaxKind.ObjectInitializerExpression,
+                    SeparatedList<ExpressionSyntax>(
+                        SyntaxNodeList(
+                            Assignment(nameof(PurchaseMenu.ExcelSheet), purchaseMenu.ExcelSheet,
+                                    emptyMenu.ExcelSheet)
+                                .AsSyntaxNodeOrToken(),
+                            Assignment(nameof(PurchaseMenu.Key), purchaseMenu.Key,
+                                    emptyMenu.Key)
+                                .AsSyntaxNodeOrToken()))));
+    }
+}
 
                 DialogueChoice dialogueChoice => dialogueChoice.ToExpressionSyntax(),
                 JumpDestination jumpDestination => jumpDestination.ToExpressionSyntax(),
                 ExcelRef excelRef => excelRef.ToExpressionSyntax(),
+                PurchaseMenu purchaseMenu => purchaseMenu.ToExpressionSyntax(),
                 ComplexCombatData complexCombatData => complexCombatData.ToExpressionSyntax(),
                 QuestWorkValue questWorkValue => questWorkValue.ToExpressionSyntax(),
                 List<QuestWorkValue> list => list.ToExpressionSyntax(), // TODO fix in AssignmentList