// Copyright (c) Microsoft. All rights reserved. using System.ComponentModel; namespace Demo.Workflows.Declarative.InvokeFunctionTool; #pragma warning disable CA1822 // Mark members as static /// /// Plugin providing menu-related functions that can be invoked directly by the workflow /// using the InvokeFunctionTool action. /// public sealed class MenuPlugin { [Description("Provides a list items on the menu.")] public MenuItem[] GetMenu() { return s_menuItems; } [Description("Provides a list of specials from the menu.")] public MenuItem[] GetSpecials() { return [.. s_menuItems.Where(i => i.IsSpecial)]; } [Description("Provides the price of the requested menu item.")] public float? GetItemPrice( [Description("The name of the menu item.")] string name) { return s_menuItems.FirstOrDefault(i => i.Name.Equals(name, StringComparison.OrdinalIgnoreCase))?.Price; } private static readonly MenuItem[] s_menuItems = [ new() { Category = "Soup", Name = "Clam Chowder", Price = 4.95f, IsSpecial = true, }, new() { Category = "Soup", Name = "Tomato Soup", Price = 4.95f, IsSpecial = false, }, new() { Category = "Salad", Name = "Cobb Salad", Price = 9.99f, }, new() { Category = "Salad", Name = "House Salad", Price = 4.95f, }, new() { Category = "Drink", Name = "Chai Tea", Price = 2.95f, IsSpecial = true, }, new() { Category = "Drink", Name = "Soda", Price = 1.95f, }, ]; public sealed class MenuItem { public string Category { get; init; } = string.Empty; public string Name { get; init; } = string.Empty; public float Price { get; init; } public bool IsSpecial { get; init; } } }