Fibers/Exceptions.cs
1 //
2 // Copyright (c) Microsoft. All rights reserved.
3 // Licensed under the MIT license.
4 //
5 // Microsoft Bot Framework: http://botframework.com
6 //
7 // Bot Builder SDK GitHub:
8 // https://github.com/Microsoft/BotBuilder
9 //
10 // Copyright (c) Microsoft Corporation
11 // All rights reserved.
12 //
13 // MIT License:
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
21 //
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
24 //
25 // THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 //
33 
34 using System;
35 using System.Runtime.Serialization;
36 
37 namespace Microsoft.Bot.Builder.Internals.Fibers
38 {
39  [Serializable]
40  public abstract class InvalidWaitException : InvalidOperationException
41  {
42  private readonly IWait wait;
43 
44  public IWait Wait { get { return this.wait; } }
45 
46  protected InvalidWaitException(string message, IWait wait)
47  : base(message)
48  {
49  SetField.NotNull(out this.wait, nameof(wait), wait);
50  }
51  protected InvalidWaitException(SerializationInfo info, StreamingContext context)
52  : base(info, context)
53  {
54  SetField.NotNullFrom(out this.wait, nameof(this.wait), info);
55  }
56  public override void GetObjectData(SerializationInfo info, StreamingContext context)
57  {
58  base.GetObjectData(info, context);
59  info.AddValue(nameof(this.wait), wait);
60  }
61  }
62 
63  [Serializable]
65  {
66  private readonly Need need;
67  private readonly Need have;
68  public Need Need { get { return this.need; } }
69  public Need Have { get { return this.have; } }
70 
71  public InvalidNeedException(IWait wait, Need need)
72  : base($"invalid need: expected {need}, have {wait.Need}", wait)
73  {
74  this.need = need;
75  this.have = wait.Need;
76  }
77  private InvalidNeedException(SerializationInfo info, StreamingContext context)
78  : base(info, context)
79  {
80  this.need = (Need)info.GetValue(nameof(this.need), typeof(Need));
81  this.have = (Need)info.GetValue(nameof(this.have), typeof(Need));
82  }
83 
84  public override void GetObjectData(SerializationInfo info, StreamingContext context)
85  {
86  base.GetObjectData(info, context);
87  info.AddValue(nameof(this.need), this.need);
88  info.AddValue(nameof(this.have), this.have);
89  }
90  }
91 
92  [Serializable]
94  {
95  private readonly Type type;
96 
97  public InvalidTypeException(IWait wait, Type type)
98  : base($"invalid type: expected {wait.ItemType}, have {type.Name}", wait)
99  {
100  SetField.NotNull(out this.type, nameof(type), type);
101  }
102  private InvalidTypeException(SerializationInfo info, StreamingContext context)
103  : base(info, context)
104  {
105  SetField.NotNullFrom(out this.type, nameof(this.type), info);
106  }
107  public override void GetObjectData(SerializationInfo info, StreamingContext context)
108  {
109  base.GetObjectData(info, context);
110  info.AddValue(nameof(this.type), type);
111  }
112  }
113 
114  [Serializable]
116  {
118  : base($"invalid next: {wait}", wait)
119  {
120  }
121  private InvalidNextException(SerializationInfo info, StreamingContext context)
122  : base(info, context)
123  {
124  }
125  }
126 
127  [Serializable]
128  public sealed class ClosureCaptureException : SerializationException
129  {
130  [NonSerialized]
131  public readonly object Instance;
132  public ClosureCaptureException(object instance)
133  : base($"anonymous method closures that capture the environment are not serializable, consider removing environment capture or using a reflection serialization surrogate: {instance}")
134  {
135  this.Instance = instance;
136  }
137  private ClosureCaptureException(SerializationInfo info, StreamingContext context)
138  : base(info, context)
139  {
140  }
141  }
142 }
override void GetObjectData(SerializationInfo info, StreamingContext context)
override void GetObjectData(SerializationInfo info, StreamingContext context)
Need
This is the stage of the wait, showing what the wait needs during its lifecycle.
Definition: Wait.cs:58
InvalidWaitException(SerializationInfo info, StreamingContext context)
override void GetObjectData(SerializationInfo info, StreamingContext context)