private ExperimentalFlag(ExperimentalFlag flag, bool enabled = false)
 {
     mParentFlag = flag.mParentFlag;
     mGuid       = flag.Guid;
     mName       = flag.Name;
     mEnabled    = enabled;
 }
        public ExperimentalFlag(
            string name,
            Guid namespaceId,
            bool enabled = false,
            IExperimentalFlag parentFlag = null
            )
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            mParentFlag = parentFlag;
            mGuid       = GuidUtils.CreateNamed(namespaceId, name);
            mName       = name;
            mEnabled    = enabled;
        }
        private bool InternalTrySet(PropertyInfo property, [NotNull] IExperimentalFlag flag, bool enabled)
        {
            /* Unwraps the flag */
            if (flag is ExperimentalFlagAlias && !TryGet(flag.Guid, out flag))
            {
                return(false);
            }

            if (property == null && !TryGetProperty(flag, out property))
            {
                return(false);
            }

            property.SetValue(this, flag.With(enabled));
            Save();

            return(true);
        }
 public bool TryGet(string flagName, out IExperimentalFlag flag)
 {
     return(ValueUtils.SetDefault(TryGetProperty(flagName, out var property), out flag) &&
            property.TryGetValue(this, out flag));
 }
 public bool TrySet([NotNull] IExperimentalFlag flag, bool enabled)
 {
     return(InternalTrySet(null, flag, enabled));
 }
 protected bool TryGetProperty(IExperimentalFlag flag, out PropertyInfo flagPropertyInfo)
 {
     return(mFlagsById.TryGetValue(flag.Guid, out flagPropertyInfo));
 }
 public bool Enable([NotNull] IExperimentalFlag flag)
 {
     return(TrySet(flag, true));
 }
 public bool Disable(IExperimentalFlag flag)
 {
     return(TrySet(flag, false));
 }
 /// <inheritdoc cref="IEquatable{T}" />
 public bool Equals(IExperimentalFlag other)
 {
     return(Guid == other?.Guid && Enabled == other.Enabled);
 }
 /// <inheritdoc cref="IEquatable{T}" />
 public bool Equals(IExperimentalFlag other)
 {
     return(this == other);
 }