public bool Equals(
            LayoutInfo x,
            LayoutInfo y)
        {
            if (ReferenceEquals(x, y))
            {
                return(true);
            }

            if (x == null ||
                y == null)
            {
                return(false);
            }

            var entityComparer     = new EntityInfoComparer();
            var actionListComparer = new ActionListComparer();
            var concernComparer    = new ConcernInfoComparer();

            if (x.Title != y.Title ||
                x.Description != y.Description ||
                x.IsVisibleInMenu != y.IsVisibleInMenu ||
                x.IsRoot != y.IsRoot ||
                !ReferenceEquals(
                    x.Parent,
                    y.Parent) ||
                !actionListComparer.Equals(
                    x.Actions,
                    y.Actions) ||
                !entityComparer.Equals(
                    x.DataModel,
                    y.DataModel) ||
                !concernComparer.Equals(
                    x.Concern,
                    y.Concern))
            {
                return(false);
            }

            return(true);
        }
        public bool Equals(
            ActionInfo x,
            ActionInfo y)
        {
            if (ReferenceEquals(x, y))
            {
                return(true);
            }

            if (x == null ||
                y == null)
            {
                return(false);
            }

            var concernComparer   = new ConcernInfoComparer();
            var actionComparer    = new ActionInfoComparer();
            var telemetryComparer = new TelemetryInfoComparer();

            if (x.Id != y.Id ||
                x.Type != y.Type ||
                x.Target != y.Target ||
                x.Api != y.Api ||
                !ReferenceEquals(
                    x.Parent,
                    y.Parent) ||
                !concernComparer.Equals(
                    x.TargetConcern,
                    y.TargetConcern) ||
                !actionComparer.Equals(
                    x.TargetAction,
                    y.TargetAction) ||
                !telemetryComparer.Equals(
                    x.Telemetry,
                    y.Telemetry))
            {
                return(false);
            }

            return(true);
        }