blob: 3e65ad07d8cf843a9730b444b3a5a0f9149aa1bb [file] [log] [blame]
#region License
/*
* 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.
*/
#endregion
using System;
namespace Gremlin.Net.Structure.IO.GraphBinary
{
/// <summary>
/// Represents a GraphBinary data type.
/// </summary>
public class DataType : IEquatable<DataType>
{
#pragma warning disable 1591
public static readonly DataType Int = new DataType(0x01);
public static readonly DataType Long = new DataType(0x02);
public static readonly DataType String = new DataType(0x03);
public static readonly DataType Date = new DataType(0x04);
public static readonly DataType Timestamp = new DataType(0x05);
public static readonly DataType Class = new DataType(0x06);
public static readonly DataType Double = new DataType(0x07);
public static readonly DataType Float = new DataType(0x08);
public static readonly DataType List = new DataType(0x09);
public static readonly DataType Map = new DataType(0X0A);
public static readonly DataType Set = new DataType(0X0B);
public static readonly DataType Uuid = new DataType(0X0C);
public static readonly DataType Edge = new DataType(0x0D);
public static readonly DataType Path = new DataType(0x0E);
public static readonly DataType Property = new DataType(0x0F);
public static readonly DataType Vertex = new DataType(0x11);
public static readonly DataType VertexProperty = new DataType(0x12);
public static readonly DataType Barrier = new DataType(0x13);
public static readonly DataType Binding = new DataType(0x14);
public static readonly DataType Bytecode = new DataType(0x15);
public static readonly DataType Cardinality = new DataType(0x16);
public static readonly DataType Column = new DataType(0x17);
public static readonly DataType Direction = new DataType(0x18);
public static readonly DataType Operator = new DataType(0x19);
public static readonly DataType Order = new DataType(0x1A);
public static readonly DataType Pick = new DataType(0x1B);
public static readonly DataType Pop = new DataType(0x1C);
public static readonly DataType Lambda = new DataType(0x1D);
public static readonly DataType P = new DataType(0x1E);
public static readonly DataType Scope = new DataType(0x1F);
public static readonly DataType T = new DataType(0x20);
public static readonly DataType Traverser = new DataType(0x21);
public static readonly DataType BigDecimal = new DataType(0x22);
public static readonly DataType BigInteger = new DataType(0x23);
public static readonly DataType Byte = new DataType(0x24);
public static readonly DataType ByteBuffer = new DataType(0x25);
public static readonly DataType Short = new DataType(0x26);
public static readonly DataType Boolean = new DataType(0x27);
public static readonly DataType TextP = new DataType(0x28);
public static readonly DataType TraversalStrategy = new DataType(0x29);
public static readonly DataType BulkSet = new DataType(0x2A);
// TODO: Support metrics and traversal metrics
public static readonly DataType Char = new DataType(0x80);
public static readonly DataType Duration = new DataType(0x81);
#pragma warning restore 1591
/// <summary>
/// A custom type, represented as a blob value.
/// </summary>
public static readonly DataType Custom = new DataType(0);
/// <summary>
/// A null value for an unspecified Object value.
/// </summary>
public static readonly DataType UnspecifiedNull = new DataType(0xFE);
private DataType(int code)
{
TypeCode = (byte) code;
}
/// <summary>
/// Gets the type code of this data type.
/// </summary>
public byte TypeCode { get; }
/// <summary>
/// Creates a new <see cref="DataType"/> instance for the given type code.
/// </summary>
public static DataType FromTypeCode(int code)
{
return new DataType(code);
}
/// <inheritdoc />
public bool Equals(DataType other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return TypeCode == other.TypeCode;
}
/// <inheritdoc />
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != GetType()) return false;
return Equals((DataType) obj);
}
/// <inheritdoc />
public override int GetHashCode()
{
return TypeCode.GetHashCode();
}
/// <summary>
/// Determines whether two specified <see cref="DataType"/> have the same values.
/// </summary>
public static bool operator ==(DataType first, DataType second)
{
if (ReferenceEquals(null, first))
{
if (ReferenceEquals(null, second))
{
return true;
}
return false;
}
return first.Equals(second);
}
/// <summary>
/// Determines whether two specified <see cref="DataType"/> have different values.
/// </summary>
public static bool operator !=(DataType first, DataType second)
{
return !(first == second);
}
/// <inheritdoc />
public override string ToString()
{
return $"DataType{{ TypeCode = {TypeCode} }}";
}
}
}