Exemple #1
0
        public void TestAvroDecimalToString(decimal value)
        {
            var valueString = value.ToString();

            var avroDecimal       = new AvroDecimal(value);
            var avroDecimalString = avroDecimal.ToString();

            Assert.AreEqual(valueString, avroDecimalString);
        }
Exemple #2
0
        internal override object ConvertToLogicalValue(object baseValue, LogicalTypeSchema schema, Type type)
        {
            var buffer = AvroType.Bytes == schema.BaseTypeSchema.Type
                ? (byte[])baseValue
                : ((AvroFixed)baseValue).Value;

            Array.Reverse(buffer);
            var avroDecimal = new AvroDecimal(new BigInteger(buffer), Scale);


            return(AvroDecimal.ToDecimal(avroDecimal));
        }
Exemple #3
0
        internal object ConvertToBaseValue(object logicalValue, DecimalSchema schema)
        {
            var avroDecimal  = new AvroDecimal((decimal)logicalValue);
            var logicalScale = Scale;
            var scale        = avroDecimal.Scale;

            //Resize value to match schema Scale property
            int sizeDiff = logicalScale - scale;

            if (sizeDiff < 0)
            {
                throw new AvroTypeException(
                          $@"Decimal Scale for value [{logicalValue}] is equal to [{scale}]. This exceeds default setting [{logicalScale}].
Consider adding following attribute to your property:

[AvroDecimal(Precision = 28, Scale = {scale})]
");
            }

            string trailingZeros      = new string('0', sizeDiff);
            var    logicalValueString = logicalValue.ToString();

            string valueWithTrailingZeros;

            if (logicalValueString.Contains(avroDecimal.SeparatorCharacter))
            {
                valueWithTrailingZeros = $"{logicalValue}{trailingZeros}";
            }
            else
            {
                valueWithTrailingZeros = $"{logicalValue}{avroDecimal.SeparatorCharacter}{trailingZeros}";
            }

            avroDecimal = new AvroDecimal(valueWithTrailingZeros);

            var buffer = avroDecimal.UnscaledValue.ToByteArray();

            Array.Reverse(buffer);

            return(AvroType.Bytes == schema.BaseTypeSchema.Type
                ? (object)buffer
                : (object)new AvroFixed(
                       (FixedSchema)schema.BaseTypeSchema,
                       GetDecimalFixedByteArray(buffer, ((FixedSchema)schema.BaseTypeSchema).Size,
                                                avroDecimal.Sign < 0 ? (byte)0xFF : (byte)0x00)));
        }
    private static void AddDecimal(XContainer parent, AvroDecimal value, string name = null,
                                   string nspace = null)
    {
        var element = new XElement(XDecimal);

        if (name != null)
        {
            element.SetAttributeValue(XName, name);
        }

        if (nspace != null)
        {
            element.SetAttributeValue(XNamespace, nspace);
        }

        var decimalValue = value.ToType <decimal>();

        element.Value = XmlConvert.ToString(decimalValue);

        parent.Add(element);
    }