blob: ad5e3e959dd2302134f770bd636fa7c9fb3af59d [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.Fory;
internal enum ForyStringEncoding : ulong
{
Latin1 = 0,
Utf16 = 1,
Utf8 = 2,
}
public sealed class BoolSerializer : Serializer<bool>
{
public override bool DefaultValue => false;
public override void WriteData(WriteContext context, in bool value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteUInt8(value ? (byte)1 : (byte)0);
}
public override bool ReadData(ReadContext context)
{
return context.Reader.ReadUInt8() != 0;
}
}
public sealed class Int8Serializer : Serializer<sbyte>
{
public override sbyte DefaultValue => 0;
public override void WriteData(WriteContext context, in sbyte value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteInt8(value);
}
public override sbyte ReadData(ReadContext context)
{
return context.Reader.ReadInt8();
}
}
public sealed class Int16Serializer : Serializer<short>
{
public override short DefaultValue => 0;
public override void WriteData(WriteContext context, in short value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteInt16(value);
}
public override short ReadData(ReadContext context)
{
return context.Reader.ReadInt16();
}
}
public sealed class Int32Serializer : Serializer<int>
{
public override int DefaultValue => 0;
public override void WriteData(WriteContext context, in int value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteVarInt32(value);
}
public override int ReadData(ReadContext context)
{
return context.Reader.ReadVarInt32();
}
}
public sealed class Int64Serializer : Serializer<long>
{
public override long DefaultValue => 0;
public override void WriteData(WriteContext context, in long value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteVarInt64(value);
}
public override long ReadData(ReadContext context)
{
return context.Reader.ReadVarInt64();
}
}
public sealed class UInt8Serializer : Serializer<byte>
{
public override byte DefaultValue => 0;
public override void WriteData(WriteContext context, in byte value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteUInt8(value);
}
public override byte ReadData(ReadContext context)
{
return context.Reader.ReadUInt8();
}
}
public sealed class UInt16Serializer : Serializer<ushort>
{
public override ushort DefaultValue => 0;
public override void WriteData(WriteContext context, in ushort value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteUInt16(value);
}
public override ushort ReadData(ReadContext context)
{
return context.Reader.ReadUInt16();
}
}
public sealed class UInt32Serializer : Serializer<uint>
{
public override uint DefaultValue => 0;
public override void WriteData(WriteContext context, in uint value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteVarUInt32(value);
}
public override uint ReadData(ReadContext context)
{
return context.Reader.ReadVarUInt32();
}
}
public sealed class UInt64Serializer : Serializer<ulong>
{
public override ulong DefaultValue => 0;
public override void WriteData(WriteContext context, in ulong value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteVarUInt64(value);
}
public override ulong ReadData(ReadContext context)
{
return context.Reader.ReadVarUInt64();
}
}
public sealed class Float32Serializer : Serializer<float>
{
public override float DefaultValue => 0;
public override void WriteData(WriteContext context, in float value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteFloat32(value);
}
public override float ReadData(ReadContext context)
{
return context.Reader.ReadFloat32();
}
}
public sealed class Float64Serializer : Serializer<double>
{
public override double DefaultValue => 0;
public override void WriteData(WriteContext context, in double value, bool hasGenerics)
{
_ = hasGenerics;
context.Writer.WriteFloat64(value);
}
public override double ReadData(ReadContext context)
{
return context.Reader.ReadFloat64();
}
}
public sealed class BinarySerializer : Serializer<byte[]>
{
public override byte[] DefaultValue => null!;
public override void WriteData(WriteContext context, in byte[] value, bool hasGenerics)
{
_ = hasGenerics;
byte[] safe = value ?? [];
context.Writer.WriteVarUInt32((uint)safe.Length);
context.Writer.WriteBytes(safe);
}
public override byte[] ReadData(ReadContext context)
{
uint length = context.Reader.ReadVarUInt32();
return context.Reader.ReadBytes(checked((int)length));
}
}