blob: e0da3ca06faa8833720ff9c91b3ba9fcf5a87700 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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.
*/
namespace Apache.Ignite.Core.Binary
{
using System;
using System.Collections;
/// <summary>
/// binary object builder. Provides ability to build binary objects dynamically
/// without having class definitions.
/// <para />
/// Note that type ID is required in order to build binary object. Usually it is
/// enough to provide a simple type name and Ignite will generate the type ID
/// automatically.
/// </summary>
public interface IBinaryObjectBuilder
{
/// <summary>
/// Get object field value. If value is another binary object, then
/// builder for this object will be returned. If value is a container
/// for other objects (array, ICollection, IDictionary), then container
/// will be returned with primitive types in deserialized form and
/// binary objects as builders. Any change in builder or collection
/// returned through this method will be reflected in the resulting
/// binary object after build.
/// </summary>
/// <param name="fieldName">Field name.</param>
/// <returns>Field value.</returns>
T GetField<T>(string fieldName);
/// <summary>
/// Set object field value. Value can be of any type including other
/// <see cref="IBinaryObject"/> and other builders.
/// <para />
/// Value type for metadata is determined as <c>typeof(T)</c>;
/// use <see cref="SetField{T}(string,T,Type)"/> overload to override.
/// </summary>
/// <param name="fieldName">Field name.</param>
/// <param name="val">Field value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetField<T>(string fieldName, T val);
/// <summary>
/// Set object field value. Value can be of any type including other
/// <see cref="IBinaryObject"/> and other builders.
/// </summary>
/// <param name="fieldName">Field name.</param>
/// <param name="val">Field value.</param>
/// <param name="valType">Field value type for metadata
/// (see also <see cref="IBinaryType.GetFieldTypeName"/>).</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetField<T>(string fieldName, T val, Type valType);
/// <summary>
/// Remove object field.
/// </summary>
/// <param name="fieldName">Field name.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder RemoveField(string fieldName);
/// <summary>
/// Build the object.
/// </summary>
/// <returns>Resulting binary object.</returns>
IBinaryObject Build();
/// <summary>
/// Sets the array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetArrayField<T>(string fieldName, T[] val);
/// <summary>
/// Sets the boolean field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetBooleanField(string fieldName, bool val);
/// <summary>
/// Sets the boolean array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetBooleanArrayField(string fieldName, bool[] val);
/// <summary>
/// Sets the byte field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetByteField(string fieldName, byte val);
/// <summary>
/// Sets the byte array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetByteArrayField(string fieldName, byte[] val);
/// <summary>
/// Sets the char field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetCharField(string fieldName, char val);
/// <summary>
/// Sets the char array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetCharArrayField(string fieldName, char[] val);
/// <summary>
/// Sets the collection field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetCollectionField(string fieldName, ICollection val);
/// <summary>
/// Sets the decimal field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetDecimalField(string fieldName, decimal? val);
/// <summary>
/// Sets the decimal array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetDecimalArrayField(string fieldName, decimal?[] val);
/// <summary>
/// Sets the dictionary field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetDictionaryField(string fieldName, IDictionary val);
/// <summary>
/// Sets the double field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetDoubleField(string fieldName, double val);
/// <summary>
/// Sets the double array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetDoubleArrayField(string fieldName, double[] val);
/// <summary>
/// Sets the enum field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetEnumField<T>(string fieldName, T val);
/// <summary>
/// Sets the enum array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetEnumArrayField<T>(string fieldName, T[] val);
/// <summary>
/// Sets the float field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetFloatField(string fieldName, float val);
/// <summary>
/// Sets the float array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetFloatArrayField(string fieldName, float[] val);
/// <summary>
/// Sets the guid field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetGuidField(string fieldName, Guid? val);
/// <summary>
/// Sets the guid array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetGuidArrayField(string fieldName, Guid?[] val);
/// <summary>
/// Sets the int field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetIntField(string fieldName, int val);
/// <summary>
/// Sets the int array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetIntArrayField(string fieldName, int[] val);
/// <summary>
/// Sets the long field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetLongField(string fieldName, long val);
/// <summary>
/// Sets the long array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetLongArrayField(string fieldName, long[] val);
/// <summary>
/// Sets the short field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetShortField(string fieldName, short val);
/// <summary>
/// Sets the short array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetShortArrayField(string fieldName, short[] val);
/// <summary>
/// Sets the string field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetStringField(string fieldName, string val);
/// <summary>
/// Sets the string array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetStringArrayField(string fieldName, string[] val);
/// <summary>
/// Sets the timestamp field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetTimestampField(string fieldName, DateTime? val);
/// <summary>
/// Sets the timestamp array field.
/// </summary>
/// <param name="fieldName">Name of the field.</param>
/// <param name="val">The value.</param>
/// <returns>Current builder instance.</returns>
IBinaryObjectBuilder SetTimestampArrayField(string fieldName, DateTime?[] val);
}
}