public static BitWriter WriteEnum <TEnum>( this BitWriter bitWriter, TEnum enumValue) where TEnum : struct, IConvertible { var type = typeof(TEnum); if (!type.IsEnum) { throw new ArgumentException($"{nameof(TEnum)} must be an enum type."); } var typeCode = enumValue.GetTypeCode(); var value = Convert.ChangeType(enumValue, typeCode); switch (value) { case byte b: bitWriter.Write(b); break; case sbyte sb: bitWriter.Write(sb); break; case short i16: bitWriter.Write(i16); break; case ushort u16: bitWriter.Write(u16); break; case int i32: bitWriter.WriteVariableInt32(i32); break; case uint u32: bitWriter.WriteVariableUInt32(u32); break; case long i64: bitWriter.WriteVariableInt64(i64); break; case ulong u64: bitWriter.WriteVariableUInt64(u64); break; default: throw new ArgumentException($"Enum {type.Name} is of unsupported type `{typeCode}`."); } return(bitWriter); }
public static BitWriter Write( this BitWriter bitWriter, Guid guid) { return(bitWriter.Write(guid.ToByteArray())); }
public static BitWriter WriteEpochMilliseconds( this BitWriter bitWriter, DateTime time) { return(bitWriter.WriteVariableUInt64((ulong)(time - _epoch).TotalMilliseconds)); }