using System.Collections.Generic; using System.Linq; namespace Microsoft.Iris.Asm.Models; public record NamespaceImport : ImportDirective { public NamespaceImport(string uri, string name) : base("ns") { Uri = uri; Name = name; } public string Uri { get; init; } public string Name { get; init; } public override string ToString() => $"{base.ToString()} {Uri} as {Name}"; } public record TypeImport : ImportDirective { public TypeImport(QualifiedTypeName qualifiedName) : base("type") { QualifiedName = qualifiedName; } public QualifiedTypeName QualifiedName { get; init; } public override string ToString() => $"{base.ToString()} {QualifiedName}"; } /// /// Imports many members that can be specified by solely their name. /// public record NamedMemberImport : ImportDirective { public NamedMemberImport(QualifiedTypeName qualifiedName, IEnumerable memberNames) : base("mbrs") { QualifiedName = qualifiedName; MemberNames = memberNames.ToList(); } public QualifiedTypeName QualifiedName { get; init; } public List MemberNames { get; init; } public override string ToString() => $"{base.ToString()} {QualifiedName}{{{string.Join(", ", MemberNames)}}}"; } public record ConstructorImport : ImportDirective { public ConstructorImport(QualifiedTypeName qualifiedName, IEnumerable parameterTypes) : base("ctor") { QualifiedName = qualifiedName; ParameterTypes = parameterTypes.ToList(); } public QualifiedTypeName QualifiedName { get; init; } public IEnumerable ParameterTypes { get; init; } public override string ToString() => $"{base.ToString()} {QualifiedName}.({string.Join(", ", ParameterTypes)})"; } public record MethodImport : ImportDirective { public MethodImport(QualifiedTypeName qualifiedName, string methodName, IEnumerable parameterTypes) : base("mthd") { QualifiedName = qualifiedName; MethodName = methodName; ParameterTypes = parameterTypes.ToList(); } public QualifiedTypeName QualifiedName { get; init; } public string MethodName { get; init; } public IEnumerable ParameterTypes { get; init; } public override string ToString() => $"{base.ToString()} {QualifiedName}.{MethodName}({string.Join(", ", ParameterTypes)})"; }