/// <summary>
        /// Converts a template spec model from the Azure SDK to the powershell
        /// exposed template spec model.
        /// </summary>
        /// <param name="templateSpecVersion">The Azure SDK template spec model</param>
        /// <returns>The converted model or null if no model was specified</returns>
        internal static PSTemplateSpecVersion FromAzureSDKTemplateSpecVersion(
            TemplateSpecVersion templateSpecVersion)
        {
            if (templateSpecVersion == null)
            {
                return(null);
            }

            var psTemplateSpecVersion = new PSTemplateSpecVersion
            {
                CreationTime     = templateSpecVersion.SystemData.CreatedAt,
                Id               = templateSpecVersion.Id,
                LastModifiedTime = templateSpecVersion.SystemData.LastModifiedAt,
                Name             = templateSpecVersion.Name,
                Description      = templateSpecVersion.Description,
                Tags             = templateSpecVersion.Tags == null
                    ? new Dictionary <string, string>()
                    : new Dictionary <string, string>(templateSpecVersion.Tags),
                // Note: Cast is redundant, but present for clarity reasons:
                MainTemplate = ((JToken)templateSpecVersion.MainTemplate).ToString()
            };

            if (templateSpecVersion.LinkedTemplates?.Any() == true)
            {
                foreach (LinkedTemplateArtifact artifact in templateSpecVersion.LinkedTemplates)
                {
                    psTemplateSpecVersion.LinkedTemplates.Add(
                        PSTemplateSpecTemplateArtifact.FromAzureSDKTemplateSpecTemplateArtifact(artifact));
                }
            }

            return(psTemplateSpecVersion);
        }
        /// <summary>
        /// Converts a template spec model from the Azure SDK to the powershell
        /// exposed template spec model.
        /// </summary>
        /// <param name="templateSpecVersion">The Azure SDK template spec model</param>
        /// <returns>The converted model or null if no model was specified</returns>
        internal static PSTemplateSpecVersion FromAzureSDKTemplateSpecVersion(
            TemplateSpecVersion templateSpecVersion)
        {
            if (templateSpecVersion == null)
            {
                return(null);
            }

            var psTemplateSpecVersion = new PSTemplateSpecVersion
            {
                CreationTime     = templateSpecVersion.SystemData.CreatedAt,
                Id               = templateSpecVersion.Id,
                LastModifiedTime = templateSpecVersion.SystemData.LastModifiedAt,
                Name             = templateSpecVersion.Name,
                Description      = templateSpecVersion.Description,
                Tags             = templateSpecVersion.Tags == null
                    ? new Dictionary <string, string>()
                    : new Dictionary <string, string>(templateSpecVersion.Tags),
                // Note: Cast is redundant, but present for clarity reasons:
                Template = ((JToken)templateSpecVersion.Template).ToString()
            };

            if (templateSpecVersion.Artifacts?.Any() == true)
            {
                foreach (TemplateSpecArtifact artifact in templateSpecVersion.Artifacts)
                {
                    switch (artifact)
                    {
                    case TemplateSpecTemplateArtifact templateArtifact:
                        psTemplateSpecVersion.Artifacts.Add(
                            PSTemplateSpecTemplateArtifact.FromAzureSDKTemplateSpecTemplateArtifact(templateArtifact)
                            );
                        break;

                    default:
                        throw new PSNotSupportedException(
                                  $"Template spec artifact type '${artifact.GetType().Name}' not supported by cmdlets."
                                  );
                    }
                }
            }

            return(psTemplateSpecVersion);
        }