| File: ContentModel\SelectionCriteriaBuilder.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.Packaging\NuGet.Packaging.csproj (NuGet.Packaging) |
// 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 NuGet.ContentModel { public class SelectionCriteriaBuilder { public IReadOnlyDictionary<string, ContentPropertyDefinition> Properties { get; } public SelectionCriteriaBuilder(IReadOnlyDictionary<string, ContentPropertyDefinition> properties) { Properties = properties; } public virtual SelectionCriteria Criteria { get; } = new SelectionCriteria(); public virtual SelectionCriteriaEntryBuilder Add { get { var entry = new SelectionCriteriaEntry(); Criteria.Entries.Add(entry); return new SelectionCriteriaEntryBuilder(this, entry); } } } public class SelectionCriteriaEntryBuilder : SelectionCriteriaBuilder { public SelectionCriteriaEntry Entry { get; } public SelectionCriteriaBuilder Builder { get; } internal SelectionCriteriaEntryBuilder(SelectionCriteriaBuilder builder, SelectionCriteriaEntry entry) : base(builder.Properties) { Builder = builder; Entry = entry; } public SelectionCriteriaEntryBuilder this[string key, string? value] { get { ContentPropertyDefinition? propertyDefinition; if (!Builder.Properties.TryGetValue(key, out propertyDefinition)) { throw new Exception("Undefined property used for criteria"); } if (value == null) { Entry.Properties[key] = null!; } else { object? valueLookup; if (propertyDefinition.TryLookup(value.AsMemory(), table: null, matchOnly: false, value: out valueLookup)) { Entry.Properties[key] = valueLookup!; } else { throw new Exception("Undefined value used for criteria"); } } return this; } } public SelectionCriteriaEntryBuilder this[string key, object value] { get { ContentPropertyDefinition? propertyDefinition; if (!Builder.Properties.TryGetValue(key, out propertyDefinition)) { throw new Exception("Undefined property used for criteria"); } Entry.Properties[key] = value; return this; } } public override SelectionCriteriaEntryBuilder Add { get { return Builder.Add; } } public override SelectionCriteria Criteria { get { return Builder.Criteria; } } } }