/// <summary>
        /// Creates a new <see cref="ResourceId"/>
        /// </summary>
        /// <param name="resourceId">The fully-qualified resource Id</param>
        /// <param name="output">The resource Id</param>
        public static bool TryParse(string resourceId, out ResourceId output)
        {
            ResourceGroupLevelResourceId groupLevelResourceId;

            if (ResourceGroupLevelResourceId.TryParse(resourceId, out groupLevelResourceId))
            {
                output = groupLevelResourceId;
                return(true);
            }

            SubscriptionLevelResourceId subscriptionLevelResourceId;

            if (SubscriptionLevelResourceId.TryParse(resourceId, out subscriptionLevelResourceId))
            {
                output = subscriptionLevelResourceId;
                return(true);
            }

            TenantLevelResourceId tenantLevelResourceId;

            if (TenantLevelResourceId.TryParse(resourceId, out tenantLevelResourceId))
            {
                output = tenantLevelResourceId;
                return(true);
            }

            output = null;
            return(false);
        }
        /// <summary>
        /// Creates a new <see cref="SubscriptionLevelResourceId"/>
        /// </summary>
        /// <param name="resourceId">The resource Id string</param>
        public static SubscriptionLevelResourceId Parse(string resourceId)
        {
            SubscriptionLevelResourceId output;

            if (!SubscriptionLevelResourceId.TryParse(resourceId, out output))
            {
                throw new ArgumentException($"Unable to parse fully qualified resource id '{resourceId}'.", nameof(resourceId));
            }

            return(output);
        }
        /// <summary>
        /// Tries to create a new <see cref="SubscriptionLevelResourceId"/>
        /// </summary>
        /// <param name="resourceId">The resource Id string</param>
        /// <param name="output">The resource Id output</param>
        public static bool TryParse(string resourceId, out SubscriptionLevelResourceId output)
        {
            output = null;

            if (resourceId == null)
            {
                return(false);
            }

            var segments = resourceId.Trim('/').SplitRemoveEmpty('/');

            if (segments.Length < 3)
            {
                return(false);
            }

            if (!"subscriptions".EqualsInsensitively(segments[0]))
            {
                return(false);
            }

            if (!"providers".EqualsInsensitively(segments[2]))
            {
                return(false);
            }

            ResourceIdScope routingScope;
            IEnumerable <ResourceIdScope> parentScopes;

            if (!ResourceId.TryParseResourceScopes(
                    pathSegments: segments,
                    startIndex: 2,
                    routingScope: out routingScope,
                    parentScopes: out parentScopes))
            {
                return(false);
            }

            output = new SubscriptionLevelResourceId(
                subscriptionId: segments[1],
                routingScope: routingScope,
                parentScopes: parentScopes);
            return(true);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="SubscriptionLevelResourceId"/> class
 /// </summary>
 /// <param name="subscriptionId">The subscription Id</param>
 /// <param name="routingScope">The routing scope</param>
 /// <param name="parentScopes">The parent scopes</param>
 private SubscriptionLevelResourceId(string subscriptionId, ResourceIdScope routingScope, IEnumerable <ResourceIdScope> parentScopes)
     : base(routingScope, parentScopes, SubscriptionLevelResourceId.FormatResourceId(subscriptionId, routingScope, parentScopes))
 {
     this.SubscriptionId = subscriptionId;
 }