Example #1
0
        internal EventSourcedEntityHandler(AnySupport anySupport, IEventSourcedContext context, IBehaviorResolver behaviorReflectionCache, Func <IEventSourcedEntityCreationContext, object> entityCreationFactory = null)
        {
            AnySupport              = anySupport;
            Context                 = context;
            EntityCreationFactory   = entityCreationFactory;
            BehaviorReflectionCache = behaviorReflectionCache;

            var explicitBehaviors = Option.None <object[]>();
            var active            = true;

            void Become(object[] behaviors)
            {
                // ReSharper disable once AccessToModifiedClosure
                if (!active)
                {
                    throw new InvalidOperationException("Context is not active!");
                }
                explicitBehaviors = Option.Some(ValidateBehaviors(behaviors).ToArray());
            }

            var ctx    = new EventSourcedEntityCreationContext(context, Become);
            var entity = EntityCreationFactory(ctx);

            active           = false;
            CurrentBehaviors = explicitBehaviors.Match(behaviors => behaviors, () => new[] { entity });
        }
 private Option <BySlugResult, Error> MapSlugResultByArticleOrError(Article entity)
 {
     try
     {
         var view = _mapper.Map <ArticleView>(entity);
         return(new BySlugResult
         {
             HasResult = true,
             View = view
         }.Some <BySlugResult, Error>());
     }
     catch (Exception)
     {
         return(Option.None <BySlugResult, Error>(
                    Error.Critical("Unexpected error occured when mapping the article to view.")));
     }
 }
Example #3
0
 /// <summary>
 /// Empties an optional if a specified condition
 /// is not satisfied.
 /// </summary>
 /// <param name="condition">The condition.</param>
 /// <returns>The filtered optional.</returns>
 public Option <T> Filter(bool condition) => hasValue && !condition?Option.None <T>() : this;
Example #4
0
 /// <summary>
 /// Empties an optional if the value is null.
 /// </summary>
 /// <returns>The filtered optional.</returns>
 public Option <T> NotNull() => hasValue && value == null?Option.None <T>() : this;
Example #5
0
 public static ValueTask <Option <T> > FilterAsync <T>(this Option <T> option, Func <T, ValueTask <bool> > predicate) =>
 option.MatchAsync(
     async x => await predicate(x) ?
     option :
     Option.None <T>(),
     () => option);
Example #6
0
 public static ValueTask <Option <T, TExceptionResult> > MapExceptionAsync <T, TException, TExceptionResult>(this Option <T, TException> option, Func <TException, ValueTask <TExceptionResult> > mapping) =>
 option.MatchAsync(
     some: val => new ValueTask <Option <T, TExceptionResult> >(Option.Some <T, TExceptionResult>(val)),
     none: async err => Option.None <T, TExceptionResult>(await mapping(err)));
Example #7
0
 public static ValueTask <Option <TResult> > MapAsync <T, TResult>(this Option <T> option, Func <T, ValueTask <TResult> > mapping) =>
 option.MatchAsync(
     some: async val => (await mapping(val)).Some <TResult>(),
     none: () => Option.None <TResult>());
Example #8
0
 public static ValueTask <Option <TResult, TException> > MapAsync <T, TException, TResult>(this ValueTask <Option <T, TException> > option, Func <T, ValueTask <TResult> > mapping) =>
 option.MatchAsync(
     some: async val => (await mapping(val)).Some <TResult, TException>(),
     none: err => new ValueTask <Option <TResult, TException> >(Option.None <TResult, TException>(err)));
Example #9
0
 public static ValueTask <Option <TResult, TException> > FlatMapAsync <T, TException, TResult>(this Option <T> option, Func <T, ValueTask <Option <TResult, TException> > > mapping, TException exception) =>
 option.MatchAsync(
     some: async val => await mapping(val),
     none: () => Option.None <TResult, TException>(exception));
Example #10
0
 public static ValueTask <Option <TResult> > FlatMapAsync <T, TResult>(this ValueTask <Option <T> > option, Func <T, ValueTask <Option <TResult> > > mapping) =>
 option.MatchAsync(
     some: async val => (await mapping(val)),
     none: () => new ValueTask <Option <TResult> >(Option.None <TResult>()));
Example #11
0
 public static ValueTask <Option <T, TException> > FilterAsync <T, TException>(this Option <T, TException> option, Func <T, ValueTask <bool> > predicate, TException exception) =>
 option.MatchAsync(
     async x => await predicate(x) ?
     option :
     Option.None <T, TException>(exception),
     _ => option);