/// <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); }
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); } }
/// <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)); }