/* Copyright 2016-present MongoDB Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System.Collections.Generic; using System.Linq; using MongoDB.Driver.Core.Misc; namespace MongoDB.Driver { /// /// Represents an abstract AggregateFacetResult with an arbitrary TOutput type. /// public abstract class AggregateFacetResult { /// /// Initializes a new instance of the class. /// /// The name of the facet. internal AggregateFacetResult(string name) { Name = Ensure.IsNotNull(name, nameof(name)); } /// /// Gets the name of the facet. /// public string Name { get; private set; } /// /// Gets the output of the facet. /// /// The type of the output documents. /// The output of the facet. public IReadOnlyList Output() { return ((AggregateFacetResult)this).Output; } } /// /// Represents the result of a single facet. /// /// The type of the output. public sealed class AggregateFacetResult : AggregateFacetResult { /// /// Initializes a new instance of the class. /// /// The name. /// The output. public AggregateFacetResult(string name, IEnumerable output) : base(name) { Ensure.IsNotNull(output, nameof(output)); var readOnlyList = output as IReadOnlyList; if (readOnlyList != null) { Output = readOnlyList; } else { Output = output.ToArray(); } } /// /// Gets or sets the output. /// /// /// The output. /// public IReadOnlyList Output { get; set; } } }