Azure / azure-sdk-for-net

This repository is for active development of the Azure SDK for .NET. For consumers of the SDK we recommend visiting our public developer docs at https://learn.microsoft.com/dotnet/azure/ or our versioned developer docs at https://azure.github.io/azure-sdk-for-net.
MIT License
5.26k stars 4.6k forks source link

Generate API view for management client #11817

Closed JoshLove-msft closed 3 years ago

JoshLove-msft commented 4 years ago

https://github.com/Azure/azure-sdk-for-net/pull/7726 We can use this as a base to work from.

Paste in the skeleton here so that it can be viewed outside of API View.

SeanFeldman commented 4 years ago

@JoshLove-msft would it be possible to provide more context in the issue description? Thank you.

JoshLove-msft commented 4 years ago

Sure, this is an internal tool that we use to generate an API skeleton for a package. Once this is done we can probably paste in the skeleton to this issue.

JoshLove-msft commented 4 years ago

Here is the proposed Track 2 API. It is very similar to Track 1, with the main differences being renaming and supporting the Track 2 Azure.Identity TokenCredential.

Notable renames: (Queue|Topic|Subscription|Rule|Namespace)Description ->(Queue|Topic|Subscription|Rule|Namespace)Properties

(Queue|Topic|Subscription)RuntimeInfo->(Queue|Topic|Subscription)Metrics

namespace Azure.Messaging.ServiceBus.Management {
    public class ServiceBusManagementClient 
    {
        public ServiceBusManagementClient(string connectionString);
        public ServiceBusManagementClient(string connectionString, ServiceBusManagementClientOptions options);
        public ServiceBusManagementClient(string fullyQualifiedNamespace, TokenCredential credential);
        public ServiceBusManagementClient(string fullyQualifiedNamespace, TokenCredential credential, ServiceBusManagementClientOptions options);
        protected ServiceBusManagementClient();
        public virtual Task<QueueProperties> CreateQueueAsync(string queueName, CancellationToken cancellationToken = default);
        public virtual Task<QueueProperties> CreateQueueAsync(QueueProperties queue, CancellationToken cancellationToken = default);
        public virtual Task<RuleProperties> CreateRuleAsync(string topicName, string subscriptionName, RuleProperties rule, CancellationToken cancellationToken = default);
        public virtual Task<SubscriptionProperties> CreateSubscriptionAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<SubscriptionProperties> CreateSubscriptionAsync(SubscriptionProperties subscription, CancellationToken cancellationToken = default);
        public virtual Task<SubscriptionProperties> CreateSubscriptionAsync(SubscriptionProperties subscription, RuleProperties rule, CancellationToken cancellationToken = default);
        public virtual Task<TopicProperties> CreateTopicAsync(string topicName, CancellationToken cancellationToken = default);
        public virtual Task<TopicProperties> CreateTopicAsync(TopicProperties topic, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteQueueAsync(string queueName, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteRuleAsync(string topicName, string subscriptionName, string ruleName, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteSubscriptionAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteTopicAsync(string topicName, CancellationToken cancellationToken = default);
        public virtual Task<NamespaceProperties> GetNamespacePropertiesAsync(CancellationToken cancellationToken = default);
        public virtual Task<QueueProperties> GetQueueAsync(string queueName, CancellationToken cancellationToken = default);
        public virtual Task<QueueMetrics> GetQueueMetricsAsync(string queueName, CancellationToken cancellationToken = default);
        public virtual Task<IList<QueueProperties>> GetQueuesAsync(int maxCount = 100, int skip = 0, CancellationToken cancellationToken = default);
        public virtual Task<IList<QueueMetrics>> GetQueuesMetricsAsync(int maxCount = 100, int skip = 0, CancellationToken cancellationToken = default);
        public virtual Task<RuleProperties> GetRuleAsync(string topicName, string subscriptionName, string ruleName, CancellationToken cancellationToken = default);
        public virtual Task<IList<RuleProperties>> GetRulesAsync(string topicName, string subscriptionName, int maxCount = 100, int skip = 0, CancellationToken cancellationToken = default);
        public virtual Task<SubscriptionProperties> GetSubscriptionAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<SubscriptionMetrics> GetSubscriptionMetricsAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<IList<SubscriptionProperties>> GetSubscriptionsAsync(string topicName, int maxCount = 100, int skip = 0, CancellationToken cancellationToken = default);
        public virtual Task<IList<SubscriptionMetrics>> GetSubscriptionsMetricsAsync(string topicName, int maxCount = 100, int skip = 0, CancellationToken cancellationToken = default);
        public virtual Task<TopicProperties> GetTopicAsync(string topicName, CancellationToken cancellationToken = default);
        public virtual Task<TopicMetrics> GetTopicMetricsAsync(string topicName, CancellationToken cancellationToken = default);
        public virtual Task<IList<TopicProperties>> GetTopicsAsync(int maxCount = 100, int skip = 0, CancellationToken cancellationToken = default);
        public virtual Task<IList<TopicMetrics>> GetTopicsMetricsAsync(int maxCount = 100, int skip = 0, CancellationToken cancellationToken = default);
        public virtual Task<bool> QueueExistsAsync(string queueName, CancellationToken cancellationToken = default);
        public virtual Task<bool> SubscriptionExistsAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<bool> TopicExistsAsync(string topicName, CancellationToken cancellationToken = default);
        public virtual Task<QueueProperties> UpdateQueueAsync(QueueProperties queue, CancellationToken cancellationToken = default);
        public virtual Task<RuleProperties> UpdateRuleAsync(string topicName, string subscriptionName, RuleProperties rule, CancellationToken cancellationToken = default);
        public virtual Task<SubscriptionProperties> UpdateSubscriptionAsync(SubscriptionProperties subscription, CancellationToken cancellationToken = default);
        public virtual Task<TopicProperties> UpdateTopicAsync(TopicProperties topic, CancellationToken cancellationToken = default);
        }
        public class ServiceBusManagementClientOptions : ClientOptions 
        {
            public ServiceBusManagementClientOptions();
            public override bool Equals(object obj);
            public override int GetHashCode();
            public override string ToString();
        }

        public abstract class AuthorizationRule : IEquatable<AuthorizationRule> 
        {
            public abstract string ClaimType { get; }
            public DateTimeOffset CreatedTime { get; }
            public abstract string KeyName { get; set; }
            public DateTimeOffset ModifiedTime { get; }
            public abstract List<AccessRights> Rights { get; set; }
            public abstract bool Equals(AuthorizationRule other);
        }
        public class AuthorizationRules : List<AuthorizationRule>, IEquatable<AuthorizationRules> 
        {
            public AuthorizationRules();
            public static bool operator ==(AuthorizationRules left, AuthorizationRules right);
            public static bool operator !=(AuthorizationRules left, AuthorizationRules right);
            public bool Equals(AuthorizationRules other);
            public override bool Equals(object obj);
            public override int GetHashCode();
        }
        public class MessageCountDetails 
        {
            public MessageCountDetails();
            public long ActiveMessageCount { get; }
            public long DeadLetterMessageCount { get; }
            public long ScheduledMessageCount { get; }
            public long TransferDeadLetterMessageCount { get; }
            public long TransferMessageCount { get; }
        }
        public class NamespaceProperties 
        {
            public NamespaceProperties();
            public string Alias { get; }
            public DateTimeOffset CreatedTime { get; }
            public MessagingSku MessagingSku { get; }
            public int MessagingUnits { get; }
            public DateTimeOffset ModifiedTime { get; }
            public string Name { get; }
            public NamespaceType NamespaceType { get; }
        }
        public class QueueMetrics
        {
            public DateTimeOffset AccessedAt { get; }
            public DateTimeOffset CreatedAt { get; }
            public long MessageCount { get; }
            public MessageCountDetails MessageCountDetails { get; }
            public string QueueName { get; }
            public long SizeInBytes { get; }
            public DateTimeOffset UpdatedAt { get; }
        }
    public class QueueProperties : IEquatable<QueueProperties> 
    {
        public QueueProperties(string queueName);
        public AuthorizationRules AuthorizationRules { get; }
        public TimeSpan AutoDeleteOnIdle { get; set; }
        public TimeSpan DefaultMessageTimeToLive { get; set; }
        public TimeSpan DuplicateDetectionHistoryTimeWindow { get; set; }
        public bool EnableBatchedOperations { get; set; }
        public bool EnableDeadLetteringOnMessageExpiration { get; set; }
        public bool EnablePartitioning { get; set; }
        public string ForwardDeadLetteredMessagesTo { get; set; }
        public string ForwardTo { get; set; }
        public TimeSpan LockDuration { get; set; }
        public int MaxDeliveryCount { get; set; }
        public long MaxSizeInMB { get; set; }
        public string QueueName { get; set; }
        public bool RequiresDuplicateDetection { get; set; }
        public bool RequiresSession { get; set; }
        public EntityStatus Status { get; set; }
        public string UserMetadata { get; set; }
        public static bool operator ==(QueueProperties left, QueueProperties right);
        public static bool operator !=(QueueProperties left, QueueProperties right);
        public bool Equals(QueueProperties other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public class SharedAccessAuthorizationRule : AuthorizationRule 
    {
        public SharedAccessAuthorizationRule(string keyName, IEnumerable<AccessRights> rights);
        public SharedAccessAuthorizationRule(string keyName, string primaryKey, IEnumerable<AccessRights> rights);
        public SharedAccessAuthorizationRule(string keyName, string primaryKey, string secondaryKey, IEnumerable<AccessRights> rights);
        public override string ClaimType { get; }
        public override sealed string KeyName { get; set; }
        public string PrimaryKey { get; set; }
        public override List<AccessRights> Rights { get; set; }
        public string SecondaryKey { get; set; }
        public static bool operator ==(SharedAccessAuthorizationRule left, public static bool operator !=(SharedAccessAuthorizationRule left, SharedAccessAuthorizationRule right);
        public override bool Equals(AuthorizationRule other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public class SubscriptionMetrics 
    {
        public DateTimeOffset AccessedAt { get; }
        public DateTimeOffset CreatedAt { get; }
        public long MessageCount { get; }
        public MessageCountDetails MessageCountDetails { get; }
        public string SubscriptionName { get; }
        public string TopicName { get; }
        public DateTimeOffset UpdatedAt { get; }
    }
    public class SubscriptionProperties : IEquatable<SubscriptionProperties> 
    {
        public SubscriptionProperties(string topicName, string subscriptionName);
        public TimeSpan AutoDeleteOnIdle { get; set; }
        public TimeSpan DefaultMessageTimeToLive { get; set; }
        public bool EnableBatchedOperations { get; set; }
        public bool EnableDeadLetteringOnFilterEvaluationExceptions { get; set; }
        public bool EnableDeadLetteringOnMessageExpiration { get; set; }
        public string ForwardDeadLetteredMessagesTo { get; set; }
        public string ForwardTo { get; set; }
        public TimeSpan LockDuration { get; set; }
        public int MaxDeliveryCount { get; set; }
        public bool RequiresSession { get; set; }
        public EntityStatus Status { get; set; }
        public string SubscriptionName { get; set; }
        public string TopicName { get; set; }
        public string UserMetadata { get; set; }
        public static bool operator ==(SubscriptionProperties left, SubscriptionProperties right);
        public static bool operator !=(SubscriptionProperties left, SubscriptionProperties right);
        public bool Equals(SubscriptionProperties other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public class TopicMetrics 
    {
            public DateTimeOffset AccessedAt { get; }
            public DateTimeOffset CreatedAt { get; }
            public MessageCountDetails MessageCountDetails { get; }
            public long SizeInBytes { get; }
            public int SubscriptionCount { get; }
            public string TopicName { get; }
            public DateTimeOffset UpdatedAt { get; }
    }
    public class TopicProperties : IEquatable<TopicProperties> 
    {
        public TopicProperties(string topicName);
        public AuthorizationRules AuthorizationRules { get; }
        public TimeSpan AutoDeleteOnIdle { get; set; }
        public TimeSpan DefaultMessageTimeToLive { get; set; }
        public TimeSpan DuplicateDetectionHistoryTimeWindow { get; set; }
        public bool EnableBatchedOperations { get; set; }
        public bool EnablePartitioning { get; set; }
        public long MaxSizeInMB { get; set; }
        public bool RequiresDuplicateDetection { get; set; }
        public EntityStatus Status { get; set; }
        public bool SupportOrdering { get; set; }
        public string TopicName { get; set; }
        public string UserMetadata { get; set; }
        public static bool operator ==(TopicProperties left, TopicProperties right);
        ic static bool operator !=(TopicProperties left, TopicProperties t);
        public bool Equals(TopicProperties other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public enum AccessRights 
    {
        Manage = 0,
        Send = 1,
        Listen = 2,
    }
    public enum EntityStatus 
    {
        [EnumMember]
        Active = 0,
        [EnumMember]
        Disabled = 1,
        [EnumMember]
        SendDisabled = 3,
        [EnumMember]
        ReceiveDisabled = 4,
        [EnumMember]
        Unknown = 99,
    }
    public enum MessagingSku 
    {
        Basic = 1,
        Standard = 2,
        Premium = 3,
        Others = 99,
    }
    public enum NamespaceType 
    {
        ServiceBus = 0,
        Mixed = 2,
        Others = 99,
    }
}
SeanFeldman commented 4 years ago

A few items:

  1. The one potential change I'd look into is removing MessageCountDetails from TopicMetrics. A topic should be a send-only entity and conceptually should route messages to the subscriptions. Unfortunately, both tracks 1 and 2 have leaked broker internal implementation details and exposed TopicRuntimeInfo.MessageCountDetails.

  2. It would be nice to have helper methods such as Create(Queue|Topic|Subscription)IfNotExistsAsync(). Often times the code to create an entity if it doesn't exist is written where it could be converted to a single command.

  3. NamespaceType is that still necessary? Are Mixed namespaces still a thing with ASB? And would Others be a real-world case?

  4. Enumerations such as EntityStatus, MessagingSku, NamespaceType have a value Others (99). Shouldn't the SDK throw an exception when an unexpected value is received rather than attempting to handle an unknown state?

JoshLove-msft commented 4 years ago
  1. We've confirmed with the PG that this is okay to remove.
  2. The concern with the CreateIfNotExists methods is that the creation calls are expensive so the PG would rather encourage using the Exists pattern, even with the inherent race condition.
  3. Yes, this can be removed.
  4. This should use the extensible enums pattern - https://azure.github.io/azure-sdk/dotnet_implementation.html#dotnet-enums
SeanFeldman commented 4 years ago

@JoshLove-msft, you did not answer #4. Implementation is detail. My comment was that for anything that is not a known value should throw an exception and Others should not be an acceptable enumeration value.

JoshLove-msft commented 4 years ago

The idea behind using extensible enums is that if the service adds support for a new value, we can handle it to the best of our ability without requiring an SDK update. So we wouldn't throw an exception, as if another value comes back from the service, we assume that it is valid.

SeanFeldman commented 4 years ago

The idea behind using extensible enums is that if the service adds support for a new value, we can handle it to the best of our ability without requiring an SDK update. So we wouldn't throw an exception, as if another value comes back from the service, we assume that it is valid.

I think I'm failing to explain myself here. Let me try in a different way.

EntityStatus, MessagingSku, and NamespaceType all have an entry Others for a value (99) that does not represent anything concrete. Should this entry be even listed in the enum/extensible enum given this entry/value represents an abnormal state? How the enumeration is implemented is not a question.

For example, MessagingSku can have values for standard and premium tier, there's no 'other'.

JoshLove-msft commented 4 years ago

The idea behind using extensible enums is that if the service adds support for a new value, we can handle it to the best of our ability without requiring an SDK update. So we wouldn't throw an exception, as if another value comes back from the service, we assume that it is valid.

I think I'm failing to explain myself here. Let me try in a different way.

EntityStatus, MessagingSku, and NamespaceType all have an entry Others for a value (99) that does not represent anything concrete. Should this entry be even listed in the enum/extensible enum given this entry/value represents an abnormal state? How the enumeration is implemented is not a question.

For example, MessagingSku can have values for standard and premium tier, there's no 'other'.

Others would not be listed in the extensible enum.

JoshLove-msft commented 4 years ago

There ended up being a few more changes to the API from what was initially added here:

namespace Azure.Messaging.ServiceBus.Management {
    public class ServiceBusManagementClient {
        public ServiceBusManagementClient(string connectionString);
        public ServiceBusManagementClient(string connectionString, ServiceBusManagementClientOptions options);
        public ServiceBusManagementClient(string fullyQualifiedNamespace, TokenCredential credential);
        public ServiceBusManagementClient(string fullyQualifiedNamespace, TokenCredential credential, ServiceBusManagementClientOptions options);
        protected ServiceBusManagementClient();
        public virtual Task<Response<QueueDescription>> CreateQueueAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response<QueueDescription>> CreateQueueAsync(QueueDescription queue, CancellationToken cancellationToken = default);
        public virtual Task<Response<RuleDescription>> CreateRuleAsync(string topicName, string subscriptionName, RuleDescription rule, CancellationToken cancellationToken = default);
        public virtual Task<Response<SubscriptionDescription>> CreateSubscriptionAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<Response<SubscriptionDescription>> CreateSubscriptionAsync(SubscriptionDescription subscription, CancellationToken cancellationToken = default);
        public virtual Task<Response<SubscriptionDescription>> CreateSubscriptionAsync(SubscriptionDescription subscription, RuleDescription rule, CancellationToken cancellationToken = default);
        public virtual Task<Response<TopicDescription>> CreateTopicAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response<TopicDescription>> CreateTopicAsync(TopicDescription topic, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteQueueAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteRuleAsync(string topicName, string subscriptionName, string ruleName, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteSubscriptionAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<Response> DeleteTopicAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response<NamespaceProperties>> GetNamespacePropertiesAsync(CancellationToken cancellationToken = default);
        public virtual Task<Response<QueueDescription>> GetQueueAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response<QueueRuntimeInfo>> GetQueueRuntimeInfoAsync(string name, CancellationToken cancellationToken = default);
        public virtual AsyncPageable<QueueDescription> GetQueuesAsync(CancellationToken cancellationToken = default);
        public virtual AsyncPageable<QueueRuntimeInfo> GetQueuesRuntimeInfoAsync(CancellationToken cancellationToken = default);
        public virtual Task<Response<RuleDescription>> GetRuleAsync(string topicName, string subscriptionName, string ruleName, CancellationToken cancellationToken = default);
        public virtual AsyncPageable<RuleDescription> GetRulesAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<Response<SubscriptionDescription>> GetSubscriptionAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<Response<SubscriptionRuntimeInfo>> GetSubscriptionRuntimeInfoAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual AsyncPageable<SubscriptionDescription> GetSubscriptionsAsync(string topicName, CancellationToken cancellationToken = default);
        public virtual AsyncPageable<SubscriptionRuntimeInfo> GetSubscriptionsRuntimeInfoAsync(string topicName, CancellationToken cancellationToken = default);
        public virtual Task<Response<TopicDescription>> GetTopicAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response<TopicRuntimeInfo>> GetTopicRuntimeInfoAsync(string name, CancellationToken cancellationToken = default);
        public virtual AsyncPageable<TopicDescription> GetTopicsAsync(CancellationToken cancellationToken = default);
        public virtual AsyncPageable<TopicRuntimeInfo> GetTopicsRuntimeInfoAsync(CancellationToken cancellationToken = default);
        public virtual Task<Response<bool>> QueueExistsAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response<bool>> RuleExistsAsync(string topicName, string subscriptionName, string ruleName, CancellationToken cancellationToken = default);
        public virtual Task<Response<bool>> SubscriptionExistsAsync(string topicName, string subscriptionName, CancellationToken cancellationToken = default);
        public virtual Task<Response<bool>> TopicExistsAsync(string name, CancellationToken cancellationToken = default);
        public virtual Task<Response<QueueDescription>> UpdateQueueAsync(QueueDescription queue, CancellationToken cancellationToken = default);
        public virtual Task<Response<RuleDescription>> UpdateRuleAsync(string topicName, string subscriptionName, RuleDescription rule, CancellationToken cancellationToken = default);
        public virtual Task<Response<SubscriptionDescription>> UpdateSubscriptionAsync(SubscriptionDescription subscription, CancellationToken cancellationToken = default);
        public virtual Task<Response<TopicDescription>> UpdateTopicAsync(TopicDescription topic, CancellationToken cancellationToken = default);
    }
    public class ServiceBusManagementClientOptions : ClientOptions {
        public ServiceBusManagementClientOptions();
        public override bool Equals(object obj);
        public override int GetHashCode();
        public override string ToString();
    }
    public abstract class AuthorizationRule : IEquatable<AuthorizationRule> {
        public abstract string ClaimType { get; }
        public DateTimeOffset CreatedTime { get; }
        public abstract string KeyName { get; set; }
        public DateTimeOffset ModifiedTime { get; }
        public abstract List<AccessRights> Rights { get; set; }
        public abstract bool Equals(AuthorizationRule other);
        public override abstract bool Equals(object obj);
        public override int GetHashCode();
    }
    public class AuthorizationRules : List<AuthorizationRule>, IEquatable<AuthorizationRules> {
        public AuthorizationRules();
        public static bool operator ==(AuthorizationRules left, AuthorizationRules right);
        public static bool operator !=(AuthorizationRules left, AuthorizationRules right);
        public bool Equals(AuthorizationRules other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public sealed class CorrelationRuleFilter : RuleFilter {
        public CorrelationRuleFilter();
        public CorrelationRuleFilter(string correlationId);
        public string ContentType { get; set; }
        public string CorrelationId { get; set; }
        public string Label { get; set; }
        public string MessageId { get; set; }
        public IDictionary<string, object> Properties { get; }
        public string ReplyTo { get; set; }
        public string ReplyToSessionId { get; set; }
        public string SessionId { get; set; }
        public string To { get; set; }
        public static bool operator ==(CorrelationRuleFilter left, CorrelationRuleFilter right);
        public static bool operator !=(CorrelationRuleFilter left, CorrelationRuleFilter right);
        public override bool Equals(object obj);
        public override bool Equals(RuleFilter other);
        public override int GetHashCode();
        public override string ToString();
    }
    public readonly struct EntityStatus : IEquatable<EntityStatus> {
        public EntityStatus(string value);
        public static EntityStatus Active { get; }
        public static EntityStatus Disable { get; }
        public static EntityStatus ReceiveDisabled { get; }
        public static EntityStatus SendDisabled { get; }
        public static bool operator ==(EntityStatus left, EntityStatus right);
        public static implicit operator EntityStatus(string value);
        public static bool operator !=(EntityStatus left, EntityStatus right);
        public bool Equals(EntityStatus other);
        public override bool Equals(object obj);
        public override int GetHashCode();
        public override string ToString();
    }
    public sealed class FalseRuleFilter : SqlRuleFilter {
        public FalseRuleFilter();
        public static bool operator ==(FalseRuleFilter left, FalseRuleFilter right);
        public static bool operator !=(FalseRuleFilter left, FalseRuleFilter right);
        public override bool Equals(object obj);
        public override bool Equals(RuleFilter other);
        public override int GetHashCode();
        public override string ToString();
    }
    public class MessageCountDetails {
        public MessageCountDetails();
        public long ActiveMessageCount { get; }
        public long DeadLetterMessageCount { get; }
        public long ScheduledMessageCount { get; }
        public long TransferDeadLetterMessageCount { get; }
        public long TransferMessageCount { get; }
    }
    public readonly struct MessagingSku : IEquatable<MessagingSku> {
        public MessagingSku(string value);
        public static MessagingSku Basic { get; }
        public static MessagingSku Premium { get; }
        public static MessagingSku Standard { get; }
        public static bool operator ==(MessagingSku left, MessagingSku right);
        public static implicit operator MessagingSku(string value);
        public static bool operator !=(MessagingSku left, MessagingSku right);
        public bool Equals(MessagingSku other);
        public override bool Equals(object obj);
        public override int GetHashCode();
        public override string ToString();
    }
    public class NamespaceProperties {
        public NamespaceProperties();
        public string Alias { get; }
        public DateTimeOffset CreatedTime { get; }
        public MessagingSku MessagingSku { get; }
        public int MessagingUnits { get; }
        public DateTimeOffset ModifiedTime { get; }
        public string Name { get; }
    }
    public class QueueDescription : IEquatable<QueueDescription> {
        public QueueDescription(string name);
        public AuthorizationRules AuthorizationRules { get; }
        public TimeSpan AutoDeleteOnIdle { get; set; }
        public bool DeadLetteringOnMessageExpiration { get; set; }
        public TimeSpan DefaultMessageTimeToLive { get; set; }
        public TimeSpan DuplicateDetectionHistoryTimeWindow { get; set; }
        public bool EnableBatchedOperations { get; set; }
        public bool EnablePartitioning { get; set; }
        public string ForwardDeadLetteredMessagesTo { get; set; }
        public string ForwardTo { get; set; }
        public TimeSpan LockDuration { get; set; }
        public int MaxDeliveryCount { get; set; }
        public long MaxSizeInMegabytes { get; set; }
        public string Name { get; set; }
        public bool RequiresDuplicateDetection { get; set; }
        public bool RequiresSession { get; set; }
        public EntityStatus Status { get; set; }
        public string UserMetadata { get; set; }
        public static bool operator ==(QueueDescription left, QueueDescription right);
        public static bool operator !=(QueueDescription left, QueueDescription right);
        public bool Equals(QueueDescription other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public class QueueRuntimeInfo {
        public DateTimeOffset AccessedAt { get; }
        public MessageCountDetails CountDetails { get; }
        public DateTimeOffset CreatedAt { get; }
        public long MessageCount { get; }
        public string Name { get; }
        public long SizeInBytes { get; }
        public DateTimeOffset UpdatedAt { get; }
    }
    public abstract class RuleAction : IEquatable<RuleAction> {
        public abstract bool Equals(RuleAction other);
        public override abstract bool Equals(object obj);
        public override int GetHashCode();
    }
    public sealed class RuleDescription : IEquatable<RuleDescription> {
        public RuleDescription();
        public RuleDescription(string name);
        public RuleDescription(string name, RuleFilter filter);
        public const string DefaultRuleName = "$Default";
        public RuleAction Action { get; set; }
        public RuleFilter Filter { get; set; }
        public string Name { get; set; }
        public static bool operator ==(RuleDescription left, RuleDescription right);
        public static bool operator !=(RuleDescription left, RuleDescription right);
        public bool Equals(RuleDescription other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public abstract class RuleFilter : IEquatable<RuleFilter> {
        public abstract bool Equals(RuleFilter other);
        public override abstract bool Equals(object obj);
        public override int GetHashCode();
    }
    public class SharedAccessAuthorizationRule : AuthorizationRule {
        public SharedAccessAuthorizationRule(string keyName, IEnumerable<AccessRights> rights);
        public SharedAccessAuthorizationRule(string keyName, string primaryKey, IEnumerable<AccessRights> rights);
        public SharedAccessAuthorizationRule(string keyName, string primaryKey, string secondaryKey, IEnumerable<AccessRights> rights);
        public override string ClaimType { get; }
        public override sealed string KeyName { get; set; }
        public string PrimaryKey { get; set; }
        public override List<AccessRights> Rights { get; set; }
        public string SecondaryKey { get; set; }
        public static bool operator ==(SharedAccessAuthorizationRule left, SharedAccessAuthorizationRule right);
        public static bool operator !=(SharedAccessAuthorizationRule left, SharedAccessAuthorizationRule right);
        public override bool Equals(object obj);
        public override bool Equals(AuthorizationRule other);
        public override int GetHashCode();
    }
    public sealed class SqlRuleAction : RuleAction {
        public SqlRuleAction(string sqlExpression);
        public IDictionary<string, object> Parameters { get; }
        public string SqlExpression { get; }
        public static bool operator ==(SqlRuleAction left, SqlRuleAction right);
        public static bool operator !=(SqlRuleAction left, SqlRuleAction right);
        public override bool Equals(object obj);
        public override bool Equals(RuleAction other);
        public override int GetHashCode();
        public override string ToString();
    }
    public class SqlRuleFilter : RuleFilter {
        public SqlRuleFilter(string sqlExpression);
        public IDictionary<string, object> Parameters { get; }
        public string SqlExpression { get; }
        public static bool operator ==(SqlRuleFilter left, SqlRuleFilter right);
        public static bool operator !=(SqlRuleFilter left, SqlRuleFilter right);
        public override bool Equals(object obj);
        public override bool Equals(RuleFilter other);
        public override int GetHashCode();
        public override string ToString();
    }
    public class SubscriptionDescription : IEquatable<SubscriptionDescription> {
        public SubscriptionDescription(string topicName, string subscriptionName);
        public TimeSpan AutoDeleteOnIdle { get; set; }
        public bool DeadLetteringOnMessageExpiration { get; set; }
        public TimeSpan DefaultMessageTimeToLive { get; set; }
        public bool EnableBatchedOperations { get; set; }
        public bool EnableDeadLetteringOnFilterEvaluationExceptions { get; set; }
        public string ForwardDeadLetteredMessagesTo { get; set; }
        public string ForwardTo { get; set; }
        public TimeSpan LockDuration { get; set; }
        public int MaxDeliveryCount { get; set; }
        public bool RequiresSession { get; set; }
        public EntityStatus Status { get; set; }
        public string SubscriptionName { get; set; }
        public string TopicName { get; set; }
        public string UserMetadata { get; set; }
        public static bool operator ==(SubscriptionDescription left, SubscriptionDescription right);
        public static bool operator !=(SubscriptionDescription left, SubscriptionDescription right);
        public bool Equals(SubscriptionDescription other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public class SubscriptionRuntimeInfo {
        public DateTimeOffset AccessedAt { get; }
        public MessageCountDetails CountDetails { get; }
        public DateTimeOffset CreatedAt { get; }
        public long MessageCount { get; }
        public string SubscriptionName { get; }
        public string TopicName { get; }
        public DateTimeOffset UpdatedAt { get; }
    }
    public class TopicDescription : IEquatable<TopicDescription> {
        public TopicDescription(string name);
        public AuthorizationRules AuthorizationRules { get; }
        public TimeSpan AutoDeleteOnIdle { get; set; }
        public TimeSpan DefaultMessageTimeToLive { get; set; }
        public TimeSpan DuplicateDetectionHistoryTimeWindow { get; set; }
        public bool EnableBatchedOperations { get; set; }
        public bool EnablePartitioning { get; set; }
        public long MaxSizeInMegabytes { get; set; }
        public string Name { get; set; }
        public bool RequiresDuplicateDetection { get; set; }
        public EntityStatus Status { get; set; }
        public bool SupportOrdering { get; set; }
        public string UserMetadata { get; set; }
        public static bool operator ==(TopicDescription left, TopicDescription right);
        public static bool operator !=(TopicDescription left, TopicDescription right);
        public bool Equals(TopicDescription other);
        public override bool Equals(object obj);
        public override int GetHashCode();
    }
    public class TopicRuntimeInfo {
        public DateTimeOffset AccessedAt { get; }
        public DateTimeOffset CreatedAt { get; }
        public string Name { get; }
        public long SizeInBytes { get; }
        public int SubscriptionCount { get; }
        public DateTimeOffset UpdatedAt { get; }
    }
    public sealed class TrueRuleFilter : SqlRuleFilter {
        public TrueRuleFilter();
        public static bool operator ==(TrueRuleFilter left, TrueRuleFilter right);
        public static bool operator !=(TrueRuleFilter left, TrueRuleFilter right);
        public override bool Equals(object obj);
        public override bool Equals(RuleFilter other);
        public override int GetHashCode();
        public override string ToString();
    }
    public enum AccessRights {
        Manage = 0,
        Send = 1,
        Listen = 2,
    }
}
JoshLove-msft commented 4 years ago

Leaving this issue open to track any additional API changes we make before GA.

JoshLove-msft commented 3 years ago

Closing as the ServiceBusAdministrationClient is now GA.