aspnetcore/src/Microsoft.AspNetCore.Razor..../DirectiveDescriptorBuilder.cs

102 lines
3.2 KiB
C#

// Copyright(c) .NET Foundation.All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
namespace Microsoft.AspNetCore.Razor.Evolution
{
public static class DirectiveDescriptorBuilder
{
public static IDirectiveDescriptorBuilder Create(string name)
{
return new DefaultDirectiveDescriptorBuilder(name, DirectiveDescriptorKind.SingleLine);
}
public static IDirectiveDescriptorBuilder CreateRazorBlock(string name)
{
return new DefaultDirectiveDescriptorBuilder(name, DirectiveDescriptorKind.RazorBlock);
}
public static IDirectiveDescriptorBuilder CreateCodeBlock(string name)
{
return new DefaultDirectiveDescriptorBuilder(name, DirectiveDescriptorKind.CodeBlock);
}
private class DefaultDirectiveDescriptorBuilder : IDirectiveDescriptorBuilder
{
private readonly List<DirectiveTokenDescriptor> _tokenDescriptors;
private readonly string _name;
private readonly DirectiveDescriptorKind _type;
private bool _optional;
public DefaultDirectiveDescriptorBuilder(string name, DirectiveDescriptorKind type)
{
_name = name;
_type = type;
_tokenDescriptors = new List<DirectiveTokenDescriptor>();
}
public IDirectiveDescriptorBuilder AddType()
{
var descriptor = new DirectiveTokenDescriptor()
{
Kind = DirectiveTokenKind.Type,
Optional = _optional,
};
_tokenDescriptors.Add(descriptor);
return this;
}
public IDirectiveDescriptorBuilder AddMember()
{
var descriptor = new DirectiveTokenDescriptor()
{
Kind = DirectiveTokenKind.Member,
Optional = _optional,
};
_tokenDescriptors.Add(descriptor);
return this;
}
public IDirectiveDescriptorBuilder AddString()
{
var descriptor = new DirectiveTokenDescriptor()
{
Kind = DirectiveTokenKind.String,
Optional = _optional,
};
_tokenDescriptors.Add(descriptor);
return this;
}
public IDirectiveDescriptorBuilder BeginOptionals()
{
if (_optional)
{
throw new InvalidOperationException(
Resources.FormatDirectiveDescriptor_BeginOptionalsAlreadyInvoked(nameof(BeginOptionals)));
}
_optional = true;
return this;
}
public DirectiveDescriptor Build()
{
var descriptor = new DirectiveDescriptor
{
Name = _name,
Kind = _type,
Tokens = _tokenDescriptors,
};
return descriptor;
}
}
}
}