/// <summary> /// Converts given <see cref="Type"/> to its <see cref="IProgress{T}"/> type. /// </summary> /// <param name="objectType">The type which may implement <see cref="IProgress{T}"/>.</param> /// <returns>The <see cref="IProgress{T}"/> from given <see cref="Type"/> object, or <c>null</c> if no such interface was found in the given <paramref name="objectType" />.</returns> public static Type?FindIProgressOfT(Type objectType) => TrackerHelpers <IProgress <int> > .FindInterfaceImplementedBy(objectType);
/// <summary> /// Checks if a given <see cref="Type"/> implements <see cref="IProgress{T}"/>. /// </summary> /// <param name="objectType">The type which may implement <see cref="IProgress{T}"/>.</param> /// <returns>true if given <see cref="Type"/> implements <see cref="IProgress{T}"/>; otherwise, false.</returns> public static bool IsSupportedProgressType(Type objectType) => TrackerHelpers <IProgress <int> > .CanSerialize(objectType);
/// <summary> /// Checks if a given <see cref="Type"/> implements <see cref="IAsyncEnumerable{T}"/>. /// </summary> /// <param name="objectType">The type which may implement <see cref="IAsyncEnumerable{T}"/>.</param> /// <returns>true if given <see cref="Type"/> implements <see cref="IAsyncEnumerable{T}"/>; otherwise, false.</returns> /// <devremarks> /// We use <see langword="int"/> as a generic type argument in this because what we use doesn't matter, but we must use *something*. /// </devremarks> public static bool CanSerialize(Type objectType) => TrackerHelpers <IAsyncEnumerable <int> > .CanSerialize(objectType);