Beispiel #1
0
        public void Deserialize()
        {
            var formatter = new EnumFormatterUInt32 <Target>(new MessagePackProvider(), MessagePackContext.Empty);
            var reader    = new MessagePackReader(new byte[] { 0 });

            Target target = formatter.Deserialize(ref reader);

            Assert.AreEqual(Target.Value, target);
            Assert.Pass(reader.Print());
        }
Beispiel #2
0
        public void Serialize()
        {
            var target    = Target.Value;
            var formatter = new EnumFormatterUInt32 <Target>(new MessagePackProvider(), MessagePackContext.Empty);
            var writer    = new MessagePackWriter();

            formatter.Serialize(ref writer, target);

            Assert.NotNull(writer.Buffer);
            Assert.AreEqual(1, writer.Position);
            Assert.Pass(writer.Print());
        }
        public override bool TryGet <T>(out IMessagePackFormatter <T> formatter)
        {
            Type type = typeof(T);

            if (type.IsEnum)
            {
                if (!base.TryGet(out formatter))
                {
                    Type     underlyingType = type.GetEnumUnderlyingType();
                    TypeCode typeCode       = Type.GetTypeCode(underlyingType);

                    switch (typeCode)
                    {
                    case TypeCode.Byte:
                    {
                        formatter = new EnumFormatterByte <T>(Provider, Context);
                        break;
                    }

                    case TypeCode.Int16:
                    {
                        formatter = new EnumFormatterInt16 <T>(Provider, Context);
                        break;
                    }

                    case TypeCode.Int32:
                    {
                        formatter = new EnumFormatterInt32 <T>(Provider, Context);
                        break;
                    }

                    case TypeCode.Int64:
                    {
                        formatter = new EnumFormatterInt64 <T>(Provider, Context);
                        break;
                    }

                    case TypeCode.SByte:
                    {
                        formatter = new EnumFormatterSByte <T>(Provider, Context);
                        break;
                    }

                    case TypeCode.UInt16:
                    {
                        formatter = new EnumFormatterUInt16 <T>(Provider, Context);
                        break;
                    }

                    case TypeCode.UInt32:
                    {
                        formatter = new EnumFormatterUInt32 <T>(Provider, Context);
                        break;
                    }

                    case TypeCode.UInt64:
                    {
                        formatter = new EnumFormatterUInt64 <T>(Provider, Context);
                        break;
                    }

                    default: throw new ArgumentOutOfRangeException(nameof(type), $"The specified enum underlying type not supported: '{underlyingType}.'");
                    }

                    Formatters.Add(type, formatter);
                }

                return(true);
            }

            formatter = null;
            return(false);
        }