/* SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. */ /* * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. * * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you 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; using System.Linq.Expressions; using System.Runtime.Serialization; using OpenSearch.Net.Utf8Json; namespace OpenSearch.Client.Specification.IngestApi { /// /// Sets one field and associates it with the specified value. /// If the field already exists, its value will be replaced with the provided one. /// [InterfaceDataContract] public interface ISetProcessor : IProcessor { /// /// The field to insert, upsert, or update. Supports template snippets. /// [DataMember(Name ="field")] Field Field { get; set; } /// /// The value to be set for the field. Supports template snippets. /// [DataMember(Name ="value")] [JsonFormatter(typeof(SourceWriteFormatter<>))] object Value { get; set; } /// /// If processor will update fields with pre-existing non-null-valued field. /// When set to false, such fields will not be touched. /// Default is true /// [DataMember(Name = "override")] bool? Override { get; set; } /// /// If true and value is a template snippet that evaluates to null or the /// empty string, the processor quietly exits without modifying the document. /// Defaults to false. /// [DataMember(Name = "ignore_empty_value")] bool? IgnoreEmptyValue { get; set; } } /// public class SetProcessor : ProcessorBase, ISetProcessor { /// public Field Field { get; set; } /// public object Value { get; set; } /// public bool? Override { get; set; } /// public bool? IgnoreEmptyValue { get; set; } protected override string Name => "set"; } /// public class SetProcessorDescriptor : ProcessorDescriptorBase, ISetProcessor>, ISetProcessor where T : class { protected override string Name => "set"; Field ISetProcessor.Field { get; set; } object ISetProcessor.Value { get; set; } bool? ISetProcessor.Override { get; set; } bool? ISetProcessor.IgnoreEmptyValue { get; set; } /// public SetProcessorDescriptor Field(Field field) => Assign(field, (a, v) => a.Field = v); /// public SetProcessorDescriptor Field(Expression> objectPath) => Assign(objectPath, (a, v) => a.Field = v); /// public SetProcessorDescriptor Value(TValue value) => Assign(value, (a, v) => a.Value = v); /// public SetProcessorDescriptor Override(bool? @override = true) => Assign(@override, (a, v) => a.Override = v); /// public SetProcessorDescriptor IgnoreEmptyValue(bool? ignoreEmptyValue = true) => Assign(ignoreEmptyValue, (a, v) => a.IgnoreEmptyValue = v); } }