Esempio n. 1
0
        public static void Run()
        {
            TypeModelContainer container = TypeModelContainer.CreateDefault();

            container.RegisterTypeFacade <long, DateTimeOffset, DateTimeOffsetTypeFacadeConverter>();
            container.RegisterTypeFacade <byte[], Guid, GuidByteArrayConverter>();

            var example = new FacadeExampleTable
            {
                Guid      = Guid.NewGuid(),
                Timestamp = DateTimeOffset.UtcNow,
            };

            FlatBufferSerializer serializer = new FlatBufferSerializer(
                new FlatBufferSerializerOptions(FlatBufferDeserializationOption.PropertyCache),
                container);

            byte[] destination = new byte[1024];
            serializer.Serialize(example, destination);

            var parsed = serializer.Parse <FacadeExampleTable>(destination);

            Debug.Assert(parsed.Guid == example.Guid);
            Debug.Assert(parsed.Timestamp == example.Timestamp);
        }
Esempio n. 2
0
    public void Facade_Chained()
    {
        TypeModelContainer container = TypeModelContainer.CreateDefault();

        container.RegisterTypeFacade <long, TimeSpan, TimeSpanTicksConverter>();
        container.RegisterTypeFacade <TimeSpan, DateTimeOffset, DateTimeTimeSpanConverter>();

        DateTimeOffset ts            = DateTimeOffset.UtcNow;
        TimeSpan       span          = ts - DateTimeOffset.MinValue;
        long           expectedValue = span.Ticks;

        this.FacadeTest <long, TimeSpan, TimeSpanTicksConverter>(expectedValue, span, container);
        this.FacadeTest <TimeSpan, DateTimeOffset, DateTimeTimeSpanConverter>(span, ts, container);
    }
Esempio n. 3
0
    public void Facade_NullReturnedFromConverter()
    {
        TypeModelContainer container = TypeModelContainer.CreateDefault();

        container.RegisterTypeFacade <string, DateTimeOffset, InvalidDateTimeStringConverter>();

        FlatBufferSerializer serializer = new FlatBufferSerializer(
            new FlatBufferSerializerOptions(FlatBufferDeserializationOption.Greedy),
            container);

        byte[] destination = new byte[200];
        var    compiled    = serializer.Compile <ExtensionTable <DateTimeOffset> >();

        try
        {
            serializer.Serialize(
                new ExtensionTable <DateTimeOffset> {
                Item = DateTimeOffset.UtcNow
            },
                destination);

            Assert.False(true, "expected exception");
        }
        catch (InvalidOperationException ex)
        {
            Assert.Contains("ITypeFacadeConverter", ex.Message);
        }
    }
Esempio n. 4
0
        public void Facade_NullReturnedFromConverter2()
        {
            TypeModelContainer container = TypeModelContainer.CreateDefault();

            container.RegisterTypeFacade <long?, DateTimeOffset?, InvalidNullableDateTimeNullableLongConverter>();

            FlatBufferSerializer serializer = new FlatBufferSerializer(
                new FlatBufferSerializerOptions(FlatBufferDeserializationOption.Greedy),
                container);

            byte[] destination = new byte[200];
            var    compiled    = serializer.Compile <ExtensionTable <DateTimeOffset?> >();

            try
            {
                serializer.Serialize(
                    new ExtensionTable <DateTimeOffset?> {
                    Item = DateTimeOffset.UtcNow
                },
                    destination);

                Assert.Fail();
            }
            catch (InvalidOperationException ex)
            {
                Assert.IsTrue(ex.Message.Contains("ITypeFacadeConverter"));
            }
        }
Esempio n. 5
0
    public void Facade_SortedVector()
    {
        TypeModelContainer container = TypeModelContainer.CreateDefault();

        container.RegisterTypeFacade <long, DateTimeOffset, DateTimeTicksConverter>();

        var ex = Assert.Throws <InvalidFlatBufferDefinitionException>(
            () => container.CreateTypeModel(typeof(ExtensionTable <IIndexedVector <DateTimeOffset, KeyTable> >)));

        Assert.Equal(
            "Table FlatSharpTests.TypeFacadeTests.KeyTable declares a key property on a type that that does not support being a key in a sorted vector.",
            ex.Message);
    }
Esempio n. 6
0
    private void FacadeTest <TUnderlyingType, TType, TConverter>(
        TUnderlyingType underlyingValue,
        TType value,
        TypeModelContainer container = null) where TConverter : struct, ITypeFacadeConverter <TUnderlyingType, TType>
    {
        if (container == null)
        {
            container = TypeModelContainer.CreateDefault();
            container.RegisterTypeFacade <TUnderlyingType, TType, TConverter>();
        }

        FlatBufferSerializer serializer = new FlatBufferSerializer(
            new FlatBufferSerializerOptions(FlatBufferDeserializationOption.Greedy),
            container);

        byte[] destination  = new byte[1024];
        byte[] destination2 = new byte[1024];

        var compiled = serializer.Compile <ExtensionTable <TType> >();

        var underlyingItem = new ExtensionTable <TUnderlyingType> {
            Item = underlyingValue
        };
        var facadeItem = new ExtensionTable <TType> {
            Item = value
        };

        serializer.Serialize(facadeItem, destination);
        serializer.Serialize(underlyingItem, destination2);

        Assert.True(destination.AsSpan().SequenceEqual(destination2));

        var parsed = serializer.Parse <ExtensionTable <TType> >(destination);

        Assert.Equal(parsed.Item, value);
        Assert.Equal(serializer.GetMaxSize(facadeItem), serializer.GetMaxSize(underlyingItem));
    }