/// <summary>
        /// Converts an instance of <see cref="IAsyncReactiveResource"/>
        /// to its underlying representation for serialization.
        /// </summary>
        /// <param name="value">The original value.</param>
        /// <param name="sourceType">The source type.</param>
        /// <param name="targetType">The target type.</param>
        /// <returns>The converted instance.</returns>
        public override object ConvertTo(object value, Type sourceType, Type targetType)
        {
            // Base class knows how to write null values
            Debug.Assert(value != null);

            var resource = (IAsyncReactiveResource)value;

            var container = new ReactiveResourceContainer
            {
                Uri        = resource.Uri,
                Expression = _expressionServices != null
                    ? _expressionServices.Normalize(resource.Expression).ToExpressionSlim()
                    : resource.Expression.ToExpressionSlim(),
            };

            if (value is IAsyncReactiveDefinedResource definedResource)
            {
                container.State = (TState)definedResource.State;
            }
            else if (value is IAsyncReactiveProcessResource processResource)
            {
                container.State = (TState)processResource.State;
            }

            return(container);
        }
            protected Resource(ReactiveResourceContainer container, IReactiveExpressionServices expressionServices)
            {
                Debug.Assert(container != null);

                Uri         = container.Uri;
                _expression = new Lazy <Expression>(() => expressionServices != null
                    ? expressionServices.Normalize(container.Expression.ToExpression())
                    : container.Expression.ToExpression());
            }
 public Subscription(ReactiveResourceContainer container, IReactiveExpressionServices expressionServices)
     : base(container, expressionServices)
 {
 }
 public Stream(ReactiveResourceContainer container, IReactiveExpressionServices expressionServices)
     : base(container, expressionServices)
 {
 }
 public Observable(ReactiveResourceContainer container, IReactiveExpressionServices expressionServices)
     : base(container, expressionServices)
 {
 }
 public ProcessResource(ReactiveResourceContainer container, IReactiveExpressionServices expressionServices)
     : base(container, expressionServices)
 {
     State = container.State;
 }