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