public override bool CanWrite(DateTimeOffset value, PropertyMap propMap = null)
        {
            switch (_type)
            {
            case EpochType.UnixNanos:
                return(_innerConverter.CanWrite(value.Ticks * 100, propMap));

            case EpochType.UnixMillis:
                return(_innerConverter.CanWrite(value.Ticks / TimeSpan.TicksPerMillisecond, propMap));

            case EpochType.UnixSeconds:
                return(_innerConverter.CanWrite(value.Ticks / TimeSpan.TicksPerSecond, propMap));
            }
            return(false);
        }
Example #2
0
        public override bool TryWrite(ref ResizableMemory <byte> writer, T[] value, PropertyMap propMap = null)
        {
            if (value == null)
            {
                return(EtfWriter.TryWriteNull(ref writer));
            }

            var start = writer.Length;

            writer.Push((byte)EtfTokenType.List);
            writer.Advance(4);

            uint count = 0;

            for (int i = 0; i < value.Length; i++)
            {
                if (!_innerConverter.CanWrite(value[i], propMap))
                {
                    continue;
                }
                if (!_innerConverter.TryWrite(ref writer, value[i], propMap))
                {
                    return(false);
                }
                count++;
            }

            writer.Array[start + 1] = (byte)(count >> 24);
            writer.Array[start + 2] = (byte)(count >> 16);
            writer.Array[start + 3] = (byte)(count >> 8);
            writer.Array[start + 4] = (byte)count;

            writer.Push((byte)EtfTokenType.Nil); // Tail
            return(true);
        }
Example #3
0
        public override bool CanWrite(TBase baseValue, PropertyMap propMap = null)
        {
            //if (!(baseValue is TValue value))
            //    return true;
            var value = (TValue)baseValue;

            return(_innerConverter.CanWrite(value, propMap));
        }
Example #4
0
        public override bool TryWrite(ref ResizableMemory <byte> writer, Dictionary <string, T> value, PropertyMap propMap = null)
        {
            if (value == null)
            {
                return(EtfWriter.TryWriteNull(ref writer));
            }

            var start = writer.Length;

            writer.Push((byte)EtfTokenType.Map);
            writer.Advance(4);

            uint count = 0;

            foreach (var pair in value)
            {
                if (!_innerConverter.CanWrite(pair.Value, propMap))
                {
                    continue;
                }

                if (!EtfWriter.TryWriteUtf16Key(ref writer, pair.Key))
                {
                    return(false);
                }
                if (!_innerConverter.TryWrite(ref writer, pair.Value, propMap))
                {
                    return(false);
                }
                count++;
            }

            writer.Array[start + 1] = (byte)(count >> 24);
            writer.Array[start + 2] = (byte)(count >> 16);
            writer.Array[start + 3] = (byte)(count >> 8);
            writer.Array[start + 4] = (byte)count;
            return(true);
        }
Example #5
0
 public override bool CanWrite(T?value, PropertyMap propMap = null)
 => propMap == null || (!propMap.ExcludeNull || value != null) && (!value.HasValue || _innerConverter.CanWrite(value.Value, propMap));
Example #6
0
 public override bool CanWrite(Optional <T> value, PropertyMap propMap = null)
 => value.IsSpecified && _innerConverter.CanWrite(value.Value, propMap);