Beispiel #1
0
        public override DateTime Read(ref CborReader reader)
        {
            switch (reader.GetCurrentDataItemType())
            {
            case CborDataItemType.String:
                ReadOnlySpan <byte> rawString = reader.ReadRawString();
                if (!TryRead(rawString, out DateTime dateTime))
                {
                    throw reader.BuildException($"Invalid date format {Encoding.UTF8.GetString(rawString)}");
                }
                return(dateTime);

            case CborDataItemType.Signed:
            case CborDataItemType.Unsigned:
                long unixTime = reader.ReadInt64();
                return(DateTimeOffset.FromUnixTimeSeconds(unixTime).DateTime);

            case CborDataItemType.Double:
            case CborDataItemType.Single:
                double unixTimeDouble = reader.ReadDouble();
                return(DateTimeOffset.FromUnixTimeSeconds(0).DateTime.AddSeconds(unixTimeDouble));

            default:
                throw reader.BuildException($"Invalid date format");
            }
        }
            public Type ReadDiscriminator(ref CborReader reader)
            {
                int discriminator = reader.ReadInt32();

                if (!_typesByDiscriminator.TryGetValue(discriminator, out Type type))
                {
                    throw reader.BuildException($"Unknown type discriminator: {discriminator}");
                }
                return(type);
            }
Beispiel #3
0
        public T ReadString(ref CborReader reader)
        {
            ReadOnlySpan <byte> rawName = reader.ReadRawString();

            if (!names2Values.TryGetValue(rawName, out T enumValue))
            {
                throw reader.BuildException($"Unknown name {Encoding.ASCII.GetString(rawName)} for enum {typeof(T).Name}");
            }

            return(enumValue);
        }
        public Type ReadDiscriminator(ref CborReader reader)
        {
            string?discriminator = reader.ReadString();

            if (discriminator == null)
            {
                throw reader.BuildException("Discrimnator cannot be null or empty");
            }

            Type type = _typesByDiscriminator.GetOrAdd(discriminator, NameToType);

            return(type);
        }
        public override CborValue Read(ref CborReader reader)
        {
            switch (reader.GetCurrentDataItemType())
            {
            case CborDataItemType.Boolean:
                return(reader.ReadBoolean());

            case CborDataItemType.Null:
                reader.ReadNull();
                return(CborValue.Null);

            case CborDataItemType.Signed:
                return(reader.ReadInt64());

            case CborDataItemType.Unsigned:
                return(reader.ReadUInt64());

            case CborDataItemType.Single:
                return(reader.ReadSingle());

            case CborDataItemType.Double:
                return(reader.ReadDouble());

            case CborDataItemType.Decimal:
                return(reader.ReadDecimal());

            case CborDataItemType.String:
                return(reader.ReadString());

            case CborDataItemType.Array:
                return(((ICborConverter <CborArray>) this).Read(ref reader));

            case CborDataItemType.Map:
                return(((ICborConverter <CborObject>) this).Read(ref reader));

            case CborDataItemType.ByteString:
                return(reader.ReadByteString());

            default:
                throw reader.BuildException("Unexpected data item type");
            }
        }