1
// -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
5 using System
.Collections
.Generic
;
6 using System
.Diagnostics
.CodeAnalysis
;
8 using Microsoft
.Internal
.Collections
;
9 using System
.ComponentModel
.Composition
.Hosting
;
11 namespace System
.ComponentModel
.Composition
13 internal struct CompositionResult
15 public static readonly CompositionResult SucceededResult
= new CompositionResult();
16 private readonly IEnumerable
<CompositionError
> _errors
;
18 public CompositionResult(params CompositionError
[] errors
)
19 : this((IEnumerable
<CompositionError
>)errors
)
23 public CompositionResult(IEnumerable
<CompositionError
> errors
)
25 this._errors
= errors
;
30 get { return this._errors == null || !this._errors.FastAny(); }
33 public IEnumerable
<CompositionError
> Errors
35 get { return this._errors ?? Enumerable.Empty<CompositionError>(); }
38 public CompositionResult
MergeResult(CompositionResult result
)
48 return MergeErrors(result
._errors
);
51 public CompositionResult
MergeError(CompositionError error
)
53 return MergeErrors(new CompositionError
[] { error }
);
56 public CompositionResult
MergeErrors(IEnumerable
<CompositionError
> errors
)
58 return new CompositionResult(this._errors
.ConcatAllowingNull(errors
));
61 public CompositionResult
<T
> ToResult
<T
>(T
value)
63 return new CompositionResult
<T
>(value, this._errors
);
66 public void ThrowOnErrors()
71 public void ThrowOnErrors(AtomicComposition atomicComposition
)
75 if (atomicComposition
== null)
77 throw new CompositionException(this._errors
);
81 throw new ChangeRejectedException(this._errors
);