// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace System.ComponentModel.Design.Serialization
{
    internal static class DesignerSerializationManagerHelper
    {
        public static bool TryGetContext<T>(
            this IDesignerSerializationManager manager,
            [NotNullWhen(true)] out T? context)
        {
            object? contextObject = manager.Context[typeof(T)];
            if (manager.Context[typeof(T)] is T contextTemp)
            {
                context = contextTemp;
                return true;
            }

            context = default;
            return false;
        }

        public static T? GetContext<T>(this IDesignerSerializationManager manager) where T : class
        {
            return manager.Context[typeof(T)] as T;
        }

        public static T? GetSerializer<T>(this IDesignerSerializationManager manager, Type? objectType) where T : class
        {
            return manager.GetSerializer(objectType, typeof(T)) as T;
        }

        public static bool TryGetSerializer<T>(this IDesignerSerializationManager manager, Type? objectType, [NotNullWhen(true)] out T? serializer) where T : class
        {
            serializer = manager.GetSerializer(objectType, typeof(T)) as T;
            return serializer is not null;
        }
    }
}
