static VaultProfileManager()
        {
            var sysAppData = Environment.GetFolderPath(
                Environment.SpecialFolder.CommonApplicationData);
            var userAppData = Environment.GetFolderPath(
                Environment.SpecialFolder.LocalApplicationData);

            APP_SYS_ROOT_PATH  = Path.Combine(sysAppData, APP_ROOT_NAME);
            APP_USER_ROOT_PATH = Path.Combine(userAppData, APP_ROOT_NAME);
            PROFILES_ROOT_PATH = Path.Combine(APP_USER_ROOT_PATH, PROFILES_ROOT_NAME);

            PROFILE_DEFAULT_SYS = new VaultProfile(
                PROFILE_DEFAULT_SYS_NAME,
                Providers.LocalDiskVaultProvider.PROVIDER_NAME, new Dictionary <string, object>
            {
                [Providers.LocalDiskVaultProvider.ROOT_PATH.Name] =
                    Path.Combine(APP_SYS_ROOT_PATH, PROFILE_DEFAULT_SYS_ROOT_NAME),
                [Providers.LocalDiskVaultProvider.CREATE_PATH.Name] = true,
            });

            PROFILE_DEFAULT_USER = new VaultProfile(
                PROFILE_DEFAULT_USER_NAME,
                Providers.LocalDiskVaultProvider.PROVIDER_NAME, new Dictionary <string, object>
            {
                [Providers.LocalDiskVaultProvider.ROOT_PATH.Name] =
                    Path.Combine(APP_USER_ROOT_PATH, PROFILE_DEFAULT_USER_ROOT_NAME),
                [Providers.LocalDiskVaultProvider.CREATE_PATH.Name] = true,
            });

            BUILTIN_PROFILES = new KeyValuePair <string, VaultProfile>[]
            {
                new KeyValuePair <string, VaultProfile>(PROFILE_DEFAULT_SYS_NAME, PROFILE_DEFAULT_SYS),
                new KeyValuePair <string, VaultProfile>(PROFILE_DEFAULT_USER_NAME, PROFILE_DEFAULT_USER),
            };
        }
        public static void SetProfile(string name, string providerName,
                                      IReadOnlyDictionary <string, object> providerParams = null,
                                      IReadOnlyDictionary <string, object> vaultParams    = null)
        {
            if (name.StartsWith(":"))
            {
                throw new ArgumentException("invalid profile name", nameof(name))
                      .With(nameof(name), name);
            }

            if (!Directory.Exists(PROFILES_ROOT_PATH))
            {
                Directory.CreateDirectory(PROFILES_ROOT_PATH);
            }

            var profileFile = Path.Combine(PROFILES_ROOT_PATH, name);
            var profile     = new VaultProfile(name, providerName, providerParams, vaultParams);

            using (var fs = new FileStream(profileFile, FileMode.Create))
            {
                JsonHelper.Save(fs, profile);
            }
        }
        public static void SetProfile(string name, string providerName,
                IReadOnlyDictionary<string, object> providerParams = null,
                IReadOnlyDictionary<string, object> vaultParams = null)
        {
            if (name.StartsWith(":"))
                throw new ArgumentException("invalid profile name", nameof(name))
                        .With(nameof(name), name);

            if (!Directory.Exists(PROFILES_ROOT_PATH))
                Directory.CreateDirectory(PROFILES_ROOT_PATH);

            var profileFile = Path.Combine(PROFILES_ROOT_PATH, name);
            var profile = new VaultProfile(name, providerName, providerParams, vaultParams);

            using (var fs = new FileStream(profileFile, FileMode.Create))
            {
                JsonHelper.Save(fs, profile);
            }
        }
        static VaultProfileManager()
        {
            var sysAppData = Environment.GetFolderPath(
                    Environment.SpecialFolder.CommonApplicationData);
            var userAppData = Environment.GetFolderPath(
                    Environment.SpecialFolder.LocalApplicationData);

            APP_SYS_ROOT_PATH = Path.Combine(sysAppData, APP_ROOT_NAME);
            APP_USER_ROOT_PATH = Path.Combine(userAppData, APP_ROOT_NAME);
            PROFILES_ROOT_PATH = Path.Combine(APP_USER_ROOT_PATH, PROFILES_ROOT_NAME);

            PROFILE_DEFAULT_SYS = new VaultProfile(
                    PROFILE_DEFAULT_SYS_NAME,
                    Providers.LocalDiskVaultProvider.PROVIDER_NAME, new Dictionary<string, object>
                    {
                        [Providers.LocalDiskVaultProvider.ROOT_PATH.Name] =
                                Path.Combine(APP_SYS_ROOT_PATH, PROFILE_DEFAULT_SYS_ROOT_NAME),
                        [Providers.LocalDiskVaultProvider.CREATE_PATH.Name] = true,
                    });

            PROFILE_DEFAULT_USER = new VaultProfile(
                    PROFILE_DEFAULT_USER_NAME,
                    Providers.LocalDiskVaultProvider.PROVIDER_NAME, new Dictionary<string, object>
                    {
                        [Providers.LocalDiskVaultProvider.ROOT_PATH.Name] =
                                Path.Combine(APP_USER_ROOT_PATH, PROFILE_DEFAULT_USER_ROOT_NAME),
                        [Providers.LocalDiskVaultProvider.CREATE_PATH.Name] = true,
                    });

            BUILTIN_PROFILES = new KeyValuePair<string, VaultProfile>[]
            {
                new KeyValuePair<string, VaultProfile>(PROFILE_DEFAULT_SYS_NAME, PROFILE_DEFAULT_SYS),
                new KeyValuePair<string, VaultProfile>(PROFILE_DEFAULT_USER_NAME, PROFILE_DEFAULT_USER),
            };
        }