/// <summary>
        /// Initializes a new instance of the <see cref="LogicAppRun"/> class.
        /// </summary>
        public LogicAppRun(
            string id,
            LogicAppActionStatus status,
            object error,
            string correlationId,
            LogicAppTrigger trigger,
            IEnumerable <LogicAppAction> actions,
            IDictionary <string, string> trackedProperties,
            DateTimeOffset?startTime = null,
            DateTimeOffset?endTime   = null)
        {
            Guard.NotNull(id, nameof(id));
            actions = actions ?? Enumerable.Empty <LogicAppAction>();
            Guard.For <ArgumentException>(() => actions.Any(action => action is null), "One or more actions is 'null'");
            trackedProperties = trackedProperties ?? new Dictionary <string, string>();
            Guard.For <ArgumentException>(() => trackedProperties.Any(prop => prop.Key is null), "One or more tracked properties has 'null' as 'Key'");

            Id                = id;
            Status            = status;
            Error             = error;
            CorrelationId     = correlationId;
            Trigger           = trigger;
            Actions           = actions;
            TrackedProperties = new ReadOnlyDictionary <string, string>(trackedProperties);
            StartTime         = startTime;
            EndTime           = endTime;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="LogicAppTrigger"/> class.
        /// </summary>
        public LogicAppTrigger(
            string name,
            LogicAppActionStatus status,
            object inputs,
            object outputs,
            object error,
            DateTimeOffset?startTime = null,
            DateTimeOffset?endTime   = null)
        {
            Guard.NotNull(name, nameof(name));

            Name      = name;
            Status    = status;
            Inputs    = inputs;
            Outputs   = outputs;
            Error     = error;
            StartTime = startTime;
            EndTime   = endTime;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="LogicAppAction"/> class.
        /// </summary>
        public LogicAppAction(
            string name,
            LogicAppActionStatus status,
            object error,
            dynamic inputs,
            dynamic outputs,
            IDictionary <string, string> trackedProperties,
            DateTimeOffset?startTime = null,
            DateTimeOffset?endTime   = null)
        {
            Guard.NotNull(name, nameof(name));

            Name    = name;
            Status  = status;
            Error   = error;
            Inputs  = inputs;
            Outputs = outputs;

            TrackedProperties = new ReadOnlyDictionary <string, string>(trackedProperties ?? new Dictionary <string, string>());
            StartTime         = startTime;
            EndTime           = endTime;
        }