Пример #1
0
        private static void AddGetter(this Command command)
        {
            var c = new Command("get", "Gets a system setting")
            {
                new Argument <string>("property")
            };

            c.Handler = CommandHandler.Create(async(bool verbose, string property) =>
            {
                var store        = GetSettingsStore();
                var propertyInfo = typeof(Settings).GetProperty(property,
                                                                BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                if (propertyInfo is null)
                {
                    var properties = typeof(Settings).GetProperties().Select(info => info.Name);
                    ConsoleRendering.ClearLineAndWriteError(
                        $"Invalid property. Available properties: {string.Join(",", properties)}");
                    return(5);
                }

                if (verbose)
                {
                    ConsoleRendering.ClearLineAndWrite("Loading settings...");
                }
                var settings = await store.ReadOrCreateAsync();
                ConsoleRendering.ClearLineAndWrite($"{propertyInfo.GetValue(settings)}\n");

                return(0);
            });

            command.Add(c);
        }
Пример #2
0
        private static void AddSetter(this Command command)
        {
            var c = new Command("set", "Sets a system configuration")
            {
                new Argument <string>("property"), new Argument <string>("value")
            };

            c.Handler = CommandHandler.Create(async(bool verbose, string property, string value) =>
            {
                var store        = GetSettingsStore();
                var propertyInfo = typeof(Settings).GetProperty(property,
                                                                BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                if (propertyInfo is null)
                {
                    var properties = typeof(Settings).GetProperties().Select(info => info.Name);
                    ConsoleRendering.ClearLineAndWriteError(
                        $"Invalid property. Available properties: {string.Join(",", properties)}");
                    return(5);
                }

                object castedValue = propertyInfo.Name switch
                {
                    nameof(Settings.Name) => value,
                    nameof(Settings.Email) => value,
                    nameof(Settings.Age) => int.Parse(value),
                    _ => throw new ArgumentOutOfRangeException(nameof(property), property,
                                                               $"Can't change property '{property}'")
                };

                if (verbose)
                {
                    ConsoleRendering.ClearLineAndWrite("Loading settings...");
                }
                var settings = await store.ReadOrCreateAsync();

                if (verbose)
                {
                    ConsoleRendering.ClearLineAndWrite("Saving...");
                }
                propertyInfo.SetValue(settings, castedValue);
                await store.SaveAsync(settings);

                if (verbose)
                {
                    ConsoleRendering.ClearLine();
                }
                return(0);
            });

            command.Add(c);
        }