Beispiel #1
0
        /// <inheritdoc />
        protected override async Task <Result <Entity, IError> > Run(
            IStateMonad stateMonad,
            CancellationToken cancellationToken)
        {
            var entityResult = await Entity.Run(stateMonad, cancellationToken);

            if (entityResult.IsFailure)
            {
                return(entityResult);
            }

            var propertyResult = await Property.Run(stateMonad, cancellationToken);

            if (propertyResult.IsFailure)
            {
                return(propertyResult.ConvertFailure <Entity>());
            }

            var valueResult = await Value.Run(stateMonad, cancellationToken)
                              .Bind(x => EntityHelper.TryUnpackObjectAsync(x, cancellationToken));

            if (valueResult.IsFailure)
            {
                return(valueResult.ConvertFailure <Entity>());
            }

            var propertyName = await propertyResult.Value.GetStringAsync();

            var entityValue = EntityValue.CreateFromObject(valueResult.Value);

            var newEntity = entityResult.Value.WithProperty(propertyName, entityValue);

            return(newEntity);
        }
Beispiel #2
0
        public void TestGetExpected(
            object o,
            string expectedString,
            Maybe <int> expectedInt,
            Maybe <double> expectedDouble,
            Maybe <bool> expectedBool,
            Maybe <EncodingEnum> expectedEnumeration,
            Maybe <DateTime> expectedDateTime,
            Maybe <Entity> expectedEntity,
            Maybe <IReadOnlyList <string> > expectedList)
        {
            var entityValue = EntityValue.CreateFromObject(o);

            var actualString = entityValue.TryGetValue <string>().Value;

            actualString.Should().Be(expectedString);

            var actualInt = entityValue.TryGetValue <int>().ToMaybe();

            actualInt.Should().Be(expectedInt);

            var actualDouble = entityValue.TryGetValue <double>().ToMaybe();

            actualDouble.Should().Be(expectedDouble);

            var actualBool = entityValue.TryGetValue <bool>().ToMaybe();

            actualBool.Should().Be(expectedBool);

            var actualEnumeration = entityValue.TryGetValue <EncodingEnum>().ToMaybe();

            actualEnumeration.Should().Be(expectedEnumeration);

            var actualDateTime = entityValue.TryGetValue <DateTime>().ToMaybe();

            actualDateTime.Should().Be(expectedDateTime);

            var actualEntity = entityValue.TryGetValue <Entity>().ToMaybe();

            actualEntity.Should().Be(expectedEntity);

            var actualList = entityValue.TryGetValue <Array <StringStream> >().ToMaybe();

            actualList.HasValue.Should().Be(expectedList.HasValue);

            if (actualList.HasValue)
            {
                actualList.Value.GetElementsAsync(CancellationToken.None)
                .Result
                .Value.Select(x => x.GetString())
                .Should()
                .BeEquivalentTo(expectedList.Value);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Convert an object to an entity
        /// </summary>
        public static Entity ConvertToEntity(object obj)
        {
            var properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

            var props = new List <EntityProperty>();

            var i = 0;

            foreach (var propertyInfo in properties)
            {
                var value = propertyInfo.GetValue(obj);

                if (value is not null)
                {
                    var ev = EntityValue.CreateFromObject(value);
                    var ep = new EntityProperty(propertyInfo.Name, ev, null, i);
                    props.Add(ep);
                }

                i++;
            }

            return(new Entity(props));
        }